2015-09-28 39 views
-1

不正确INT值的自定义UISlider值的效果我有一个UIView其中alphafrom 0.8 to 0.0它代表100 - 0(整数值)请与目标C

当我向左滑动屏幕或有权作出增加或降低该值。但我总是错过一些值与4,如14,24等。

我知道这可能是准确性问题。但不知道如何在短时间内解决这个问题。谢谢!

这里是我的代码:

- (void) panFromLeftOrRight:(UIPanGestureRecognizer *)gestureRecognizer { 
    //NSLog(@"%f",_valueView.alpha); 
    if (_valueView.alpha > 0.8f) { 
     _valueView.alpha = 0.8; 
     return; 
    } 
    if (_valueView.alpha < 0.0) { 
     _valueView.alpha = 0.0; 
     return; 
    } 

    CGPoint point = [gestureRecognizer translationInView:_valueView]; 

    if ((point.x - _lastX) > 10) { 
     _valueView.alpha -= 0.01; 
     _lastX = point.x; 
    } 

    if ((point.x - _lastX) < -10) { 
     _valueView.alpha += 0.01; 
     _lastX = point.x; 
    } 

    if(gestureRecognizer.state == UIGestureRecognizerStateEnded){ 
     _lastX = 0.0; 
    } 

    float db = _valueView.alpha * 125.0f; 
    NSLog(@"%f",db); 
    NSLog(@"(%0.000f)",floor(db)); 
    _value.text = [NSString stringWithFormat:@"%0.0f",db]; 
    //OR 
    _value.text = [NSString stringWithFormat:@"%d",(int)db]; 

} 

这里是db结果:

2015-09-28 18:21:41.121 Rols[70691:2929217] 100.000000 
2015-09-28 18:21:41.847 Rols[70691:2929217] 98.750000 
2015-09-28 18:21:41.873 Rols[70691:2929217] 97.500008 
2015-09-28 18:21:42.225 Rols[70691:2929217] 96.250008 
2015-09-28 18:21:42.854 Rols[70691:2929217] 95.000008 
2015-09-28 18:21:42.874 Rols[70691:2929217] 93.750008 
2015-09-28 18:21:43.836 Rols[70691:2929217] 92.500008 
2015-09-28 18:21:44.716 Rols[70691:2929217] 91.250008 

所以对于97.5,如果使用

// for nearest integer (3.4999 -> 3, 3.5 -> 4): 
int result = (int)roundf(myFloat); 

我失去了97

根本没有94

请不要关闭这一点,这是不一样的https://stackoverflow.com/a/8786962/291240

+0

?你为什么乘以'125.0'?你为什么要转换为'int'呢? – Droppy

+0

这个问题使用这个概念的侧面菜单 –

+0

是的,就像UISlider,但值应该是countinuous整数 –

回答

0

你缺少414等原因,很简单,因为你所选择的数字:

0.01 * 125.0 = 1.25 
0.02 * 125.0 = 2.50 
0.03 * 125.0 = 3.75 
0.04 * 125.0 = 5.00 
0.05 * 125.0 = 6.25 
... 
0.10 * 125.0 = 12.50 
0.11 * 125.0 = 13.75 
0.12 * 125.0 = 15.00 

Objective-C从floatint的转换没有什么问题,这与C的做法相同。

0

我选择alpha的步骤为0.008。 变化来自:

_valueView.alpha -= 0.008; 

_valueView.alpha -= 0.008; 

而受原材料浮动你为什么要使用手势识别**和**跟踪`x`位置转换由(int)roundf(db)