IOS: UIViewImage setAlpha 问题

标签 ios xcode uiimageview

我有这个代码:

当图像将 alpha 从 0.00 更改为 1.00 时,它会立即发生变化,而不是在 3 秒内发生,为什么?

- (void) startAnimation{

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3];
[successView setAlpha:1.00];
[UIView commitAnimations];


[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3];
[successView setAlpha:0.00];
[UIView commitAnimations];}

最佳答案

两个动画都在同一个运行周期中运行(这就是 UIView 动画的工作方式——一个运行周期中的所有动画都是“串联的”。您需要使用

[UIView setAnimationDelay:3.0];

关于第二个动画


示例代码
有两种方法可以做到这一点——使用标准的开始/提交动画,或使用 blocks 方法。此示例使用开始/提交动画代码,这就是您所拥有的。问题是因为动画被串联起来,并且在不进入 CA 的情况下,标准动画行为是一个“强制”在另一个运行之前结束。它与运行循环有关; 构建动画驱动的界面 来自 WWDC 2010深入探讨这一点。但是执行您想要的操作的代码如下所示:

- (void)fadeOut {
    [UIView beginAnimations:@"Animation2" context:NULL];
    [UIView setAnimationDuration:3];
    [self.testView setAlpha:0.00];
    [UIView commitAnimations];
}
- (IBAction)animate {
    [UIView beginAnimations:@"Animation1" context:NULL];
    [UIView setAnimationDuration:3];
    [self.testView setAlpha:1.00];
    [UIView commitAnimations];

    [self performSelector:@selector(fadeOut) withObject:nil afterDelay:3.0];
}

基本上,您必须强制它中断运行循环。要记住的关键是动画不会像您期望的代码那样按顺序执行。

基于 block 的代码如下所示。请注意,我使用的是 autorepeat 选项,它会自动重复播放动画。请注意,虽然在动画中,您正在设置一个属性,因此默认情况下,动画完成后 View 将恢复可见。因此,您必须在完成 block 中再次将属性设置为零。

- (IBAction)animate {
    [UIView transitionWithView:self.testView duration:3.0 options:UIViewAnimationOptionAutoreverse animations:^{self.testView.alpha = 1.0;} completion:^(BOOL finished) {self.testView.alpha = 0.0;}];
}

希望这对您有所帮助!

关于IOS: UIViewImage setAlpha 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6997659/

相关文章:

ios - 无法删除所有带动画的 UITableView 单元格

iphone - 在 iOS 6 中发送 udp 数据包

swift - 哪些 Emoji 字符用作 Swift 标识符?

ios - swift UIView.animate 跳过动画

ios - 安装企业应用程序时出现奇怪问题

objective-c - 我们不应该再@synthesize了吗?

ios - 围绕任意点旋转 UIImageView

ios - 选择单元格时,UITableViewCell 中的 UIImageView 未突出显示

ios - 为来自 iOS 背景的 OS X 开发

ios - Xcode segue 与 UIImageView