UISlider 固定位置以保存值?

Posted

技术标签:

【中文标题】UISlider 固定位置以保存值?【英文标题】:UISlider fixed postition for saved value? 【发布时间】:2015-12-10 16:24:57 【问题描述】:

在我的项目中,我有一个 UISlider,它具有固定位置,工作正常,但是当我尝试使用 NSUserDefaults 保存值时,该位置不再有意义,它会覆盖固定位置。我尝试将保存的值与 5000 分开,然后接近该位置,但它仍然与滑块默认的位置不同。

保存完全相同的位置的逻辑计算是什么?

NSString *afsValue = [[NSUserDefaults standardUserDefaults]
                              stringForKey:@"distValue"];
        slider = [[UISlider alloc] initWithFrame:CGRectMake(28,205,264,50)];

        [slider setThumbImage:[UIImage imageNamed:@"car80"] forState:UIControlStateNormal];
        [slider setMinimumTrackTintColor:[UIColor colorWithRed:0.110f green:0.224f blue:0.400f alpha:0.85f]];
        [slider setMaximumTrackTintColor:[UIColor whiteColor]];
        [self.view addSubview:slider];

        numbers = @[@(3000), @(5000), @(10000), @(15000), @(25000), @(50000), @(75000), @(500000)];
        NSInteger numberOfSteps = ((float)[numbers count] - 1);
        slider.maximumValue = numberOfSteps;
        slider.minimumValue = 0;
        slider.value = (float) [afsValue intValue]/5000;

        slider.continuous = YES;
        [slider addTarget:self
                   action:@selector(valueChanged:)
         forControlEvents:UIControlEventValueChanged];

- (void)valueChanged:(UISlider *)sender 

    NSUInteger index = (NSUInteger)(slider.value + 0.5);
    [slider setValue:index animated:NO];
    NSNumber *number = numbers[index];

    [[NSUserDefaults standardUserDefaults] setObject:number forKey:@"distValue"];
    [[NSUserDefaults standardUserDefaults] synchronize];

【问题讨论】:

【参考方案1】:

问题是您保存到 NSUserDefaults 中的不是滑块的 value,而是来自 value 的一些奇怪的其他值派生(通过对 numbers 数组进行一些难以理解的查找)。只需保存实际的value,因为那是滑块的位置。

【讨论】:

不,当我记录值时,它具有正确的值。即使我设置了一个固定值,它也有错误的位置,例如,slider.value = (float) 75000;将使汽车站立在 100+ 而不是 75 KM 是的。您正在使用 numbers 数组更改值。我是说,在代码中的两个地方(暂时)丢失该逻辑,您将看到直接保存和恢复实际浮点值是有效的。然后你可以调试你的numbers的东西,这就是问题的根源。 是的,你是对的,它工作正常,但这并不能解决我的问题,因为我想要滑块的固定值。 是的,但你没有理解我的意思。 :) 我是说打自己的脸,然后抱怨你的脸被打了。您将实际值转换为固定间隔步骤的方式是有缺陷的。你需要调试它。【参考方案2】:

知道了,我将 slider.value 和 NUMBER 值存储在两个单独的 NSUserdefaults 中。

- (void)valueChanged:(UISlider *)sender 

    NSUInteger index = (NSUInteger)(slider.value + 0.5);
    [slider setValue:index animated:NO];
    NSNumber *number = numbers[index];

    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:slider.value] forKey:@"totalValue"];    
    [[NSUserDefaults standardUserDefaults] setObject:number forKey:@"distValue"];
    [[NSUserDefaults standardUserDefaults] synchronize];

感谢您指出。 Rg.

【讨论】:

以上是关于UISlider 固定位置以保存值?的主要内容,如果未能解决你的问题,请参考以下文章

求助:怎么固定chrome窗口的位置和大小

android固定位置拍照,Android调用系统相机拍照并保存到指定位置

如何在没有 FilePicker 的情况下在固定位置保存和加载 InkCanvas gif 文件

ArcGIS出图固定位置

如何使 div 以固定位置水平居中? [复制]

请教如何通过CSS实现div的固定位置,不随页面滚动消失