IOS: UIViewImage setAlpha 问题

发布时间: 2017/3/27 19:30:32
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有此代码︰

图像 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];}

解决方法 1:

两个动画都运行在相同的运行周期中 (这是 UIView 动画是如何工作的 — — 一个运行周期中的所有动画都"都连接"。你会需要使用

[UIView setAnimationDelay:3.0];

关于第二个动画。


示例代码
有两种方法可以做到这一点 — — 使用标准的开始提交动画,或使用的块的方法。此示例使用开始和提交动画代码,这是你的了。这个问题是因为动画被串联在一起,并没有走进 CA,标准的动画行为是为了自己的"被迫"在其他运行之前结束。它有做与运行圈;Building Animation-Driven 接口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];
}

你必须强迫它打破了运行循环,基本上。需要记住的关键一点是,动画不按顺序执行,正如你可能期望代码要。

基于块的代码看起来像这样。请注意,我使用 autorepeat 选项,自动重复该动画。但是请注意,在动画中,您设置的属性,因此在默认情况下该动画完成后视图将回去可见。因此,你有一套再要零完成块中的属性。

- (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;}];
}

希望这有助于 !

官方微信
官方QQ群
31647020