1

我有一组滑块,我正在使用 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

谢谢。

4

2 回答 2

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;
于 2012-05-28T09:30:25.017 回答
1

您的代码根据您的逻辑工作,即每次更改滑块值并且低于 85 时,将调用动画。您只能以以下方式触发动画一次:-

1>你可以保持动画发生的绝对值。类似于_sizeThumbX == 85

2>或者你可以有多少次值变化的计数器。在不同的函数中计算并存储滑块更改的值。如果滑块值在 85 范围内,请不要增加计数器值,如果滑块仍在 85 范围以下,请在动画部分检查计数器标志和滑块的当前位置如果计数器值已经为 1 即动画已经触发,则不调用动画,否则调用并增加动画计数器。

3>我不知道你的情况,因为你没有清楚地提到,但我认为如果你的滑块超出范围并再次返回,你想再次调用动画,在这种情况下将计数设为零(滑块跨越指定范围) .

于 2012-05-28T09:31:15.767 回答