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 固定位置以保存值?的主要内容,如果未能解决你的问题,请参考以下文章
android固定位置拍照,Android调用系统相机拍照并保存到指定位置