【问题标题】:Animate UILabel value increment动画 UILabel 值增量
【发布时间】:2014-08-01 12:26:23
【问题描述】:

我正在尝试使用以下代码增加百分比视图:

// Progress
    [UIView animateWithDuration:5.0 animations:^{
        for (float percent = 0.0; percent <= 0.86; percent+=0.01) {
            NSLog(@"%f", percent);
            self.circularProgress2.progress = percent;
        }
    }];

它没有动画,它直接进入最终值。我知道我可以使用NSTimer

[NSTimer scheduledTimerWithTimeInterval:0.0001 target:self selector:@selector(onLableAnimateTick:) userInfo:nil repeats:YES];

然后从被调用方法内部更改值。但是我在同一个视图上有几个条,所以我想使用第一个选项对我来说会更好。

如果不可能,我将如何复制 NSTimer 行为而不必为每个进度条创建 properties 和方法?

【问题讨论】:

    标签: ios objective-c for-loop uiview nstimer


    【解决方案1】:

    动画块内的所有代码都将被执行,你的情况是一个for循环。考虑以下情况:

    [UIView animateWithDuration:5.0 animations:^{
       CGRect f = aView.frame;
       f.origin.x = 20;
       f.origin.x = 25;
       f.origin.x = 40;
       aView.frame = f;
    }];
    

    这将使视图从当前位置动画到 x = 40。不是动画到 20,然后到 25,然后到 40。块的结果是 aViews 帧 origin.x 应该是 40,不管发生了什么在那之前。

    如果您想以给定的时间间隔自动增加进度,我会说使用计时器。当然,您仍然可以为更改设置动画(例如,通过覆盖 Progress-view 类上的 setProgress-method 并从那里调用动画),但不要使用动画块来增加模型值(进度)。

    【讨论】:

    • 谢谢。我明白了,所以我无法使用它,对吧?那么最好的选择是NSTimer,对吧?
    • 查看我编辑的答案 ;) 动画块和 NSTimer 有两个不同的用途。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多