UISlider固定邮件以节省价值?

时间:2015-12-10 16:24:58

标签: objective-c nsuserdefaults uislider nsinteger

在我的项目中我有一个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];
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

知道了,我将slider.value和NUM​​BER值存储在两个单独的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。