【问题标题】:delaying a command in xcode延迟xcode中的命令
【发布时间】:2012-11-16 15:02:42
【问题描述】:

我正在尝试实现一个与按钮上的 alpha 值混淆的简单动画。但它走得太快,你看不到动画。

-(void)Flash: (id)sender {
    UIButton *senderButton = (UIButton *)sender;
    for (float i = 0.8; i > 0.2; i = i - 0.1) {
        senderButton.alpha = i;
    }
    senderButton.alpha = 0.9;
}

如何才能每 0.5 秒减慢一次进程?

【问题讨论】:

  • 你想让按钮一直闪烁吗?
  • @user1816481:问题是关于 iOS 和 Cocoa Touch,而不是关于开发环境 XCode。我已经相应地更改了标签。

标签: objective-c ios cocoa-touch button alpha


【解决方案1】:

要在指定的持续时间内减少视图的不透明度,请将其放入动画块中。您可以设置 alpha - 我个人的偏好是为诸如此类的视觉处理调整图层属性(主要是我的代码库中的一致性问题)。您可以使用此处演示的任何一种方法(不要同时使用两者) - 在这种情况下差异可以忽略不计。如果修改图层属性,则需要导入 Quart 标头。

- (void)flash:(id)sender
{
    UIButton *button = (UIButton *)sender;

    NSTimeInterval duration = 1;
    [UIView animateWithDuration:duration
                     animations:^{

                         // My preferred approach is to set layer opacity...
                         [[button layer] setOpacity:0.1f];

                         // But you could just as easily set alpha (per your original question)
                         [button setAlpha:0.1f];


                     } completion:^(BOOL finished) {

                         // Returns the button to full opacity on completion.
                         [[button layer] setOpacity:1.0f];

                         // Or alternately, alpha
                         [button setAlpha:1.0f];
                     }];

}

【讨论】:

  • alpha 无需导入Quartz即可动画化
  • @jrturton 是的,它可以,只是根据我的个人喜好略有不同的方法。我将编辑答案以演示 alpha。
【解决方案2】:
for (float i = 0.8; i > 0.2; i = i - 0.1) {
    senderButton.alpha = i;
}

你有(至少)两个问题:

  1. 您更改 alpha 的速度大约是设备执行速度的六倍,真的快。绝对不可能有人看到这种情况发生。您需要在每次更改之间添加延迟以减慢速度。

  2. 您正在更改alpha 很多次而没有重绘视图。重绘是运行循环的一部分;当您使用这样的for 循环时,您的所有更改都会同步发生,并且每次更改后运行循环都没有机会重绘。因此,即使您添加延迟以将动画减慢到人们可以看到的程度,人们仍然不会看到它,因为您没有绘制它。

您可以使用 Core Animation 轻松解决这两个问题。以撒在他的回答中提供的例子很好。如果没有 Core Animation,您需要使用计时器来提供延迟。计时器会在每次触发时调用您的代码,以便您进行更改,并且它还将允许运行循环正常运行,以便重新绘制视图。 Core Animation 让这一切变得更简单——你为alpha 等可动画属性设置动画持续时间和最终值,Core Animation 会随着时间慢慢调整属性的值,直到最后达到最终值动画。

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2013-07-22
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多