【问题标题】:iOS, trigger UIViewAnimation once at slider value n?iOS,在滑块值 n 处触发一次 UIViewAnimation?
【发布时间】:2012-05-28 09:14:12
【问题描述】:

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

谢谢。

【问题讨论】:

  • 只需使用一个标志来检查动画是否已经运行过一次。

标签: ios uislider uiviewanimation


【解决方案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;

【讨论】:

    【解决方案2】:

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

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

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

    3>我不知道您的情况,因为您没有明确提及,但我认为如果您的滑块超出范围并再次返回,您想再次调用动画,在这种情况下将计数设为零(滑块交叉指定范围)。

    【讨论】:

    • 你好。以为我有这个,但没有。我正在使用:int thumbCount = 0; if (_sizeThumbX &lt; 85) { if (thumbCount == 0) { thumbCount++; NSLog(@"Thumb count is: %d", thumbCount); [UIView transitionWithView:_sizeLabel duration:0.5f options:UIViewAnimationCurveEaseInOut animations:^(void) { _sizeRightLabel.transform = CGAffineTransformMakeTranslation(_sizeThumbX - 180, 0); } completion:^(BOOL finished) {}]; }; } else { };
    • 我正在使用 bool 来跟踪动画是否已触发,日志显示 bool 给出了我期望的值,但无论如何都会触发动画。
    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多