iOS,在滑块值n处触发一次UIViewAnimation?

时间:2012-05-28 09:14:13

标签: ios uislider uiviewanimation

我有一组滑块,我使用Value Changed将数字输入到%指示器。我也使用此值来检查滑块是否低于某个点。如果是,我想运行一个UIViewAnimation(我是,它一切正常)。但是,如果滑块移动到阈值以下,则会不断调用动画,这意味着动画的项目从a点到b点然后反复返回。那么,我只能在阈值点触发一次动画吗?

这就是我以像素为单位获取值的方法:

_sizeSliderRange = _sizeSlider.frame.size.width - _sizeSlider.currentThumbImage.size.width;
_sizeSliderOrigin = _sizeSlider.frame.origin.x + (_sizeSlider.currentThumbImage.size.width / 4.0);
_sizeSliderValueToPixels = (_sizeSlider.value * _sizeSliderRange) + _sizeSliderOrigin;

我在链接的Value Changed IBAction函数中使用条件来检查他的值并完成工作:

if (_sizeThumbX < 85) {  //if within 60px of the left margin we animate the label to sit float left
    [UIView transitionWithView:_sizeLabel duration:0.25f options:UIViewAnimationCurveEaseInOut animations:^(void) { etc etc

感谢。

2 个答案:

答案 0 :(得分:1)

就像@Luis所说,只需使用这样的BOOL属性:

if (_sizeThumbX < 85) {  //if within 60px of the left margin we animate the label to sit float left
    if (!self.passedBelowThreshold) {
        [UIView transitionWithView:_sizeLabel duration:0.25f options:UIViewAnimationCurveEaseInOut animations:^(void) { /* ... */ }
    }
}
self.passedBelowThreshold = _sizeThumbX < 85;

答案 1 :(得分:1)

您的代码正在根据您的逻辑运行,即每次更改滑块值并且低于85时,将调用动画。您可以通过以下方式仅触发一次动画: -

1&gt;你可以保持动画发生的绝对值。像_sizeThumbX == 85

这样的东西

2&gt;或者你可以反击价值变化的次数。在不同的函数计数和存储滑块更改的值。如果滑块值位于85范围内,则不增加计数器值,并且在动画部分中检查计数器标志和滑块的当前位置,如果滑块仍在85以下范围内如果计数器值已经是1,则动画已被触发,否则不调用动画,否则调用并增加动画计数器。

3&gt;我没有你的条件,因为你没有清楚地提到但是如果你的滑块超出范围并且再次返回,你想要再次调用动画,在这种情况下使计数为零(滑块交叉指定的范围)。