我正在尝试使用 animateWithDuration: 方法在 iOS 中制作动画。
我在屏幕上移动图像(UIImageView 中的云的简单图片),然后让该动画循环运行,我想在每次它穿过屏幕时更改速度(持续时间)。
我尝试了几种方法,但对我来说都表现不正确。
我首先虽然我可以像这样使用 UIViewAnimationOptionRepeat:
[UIImageView animateWithDuration:arc4random() % 10 + 1
delay:0.0
options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat
animations:^{
//moving the cloud across the screen here
}
completion:^(BOOL finished) {
NSLog(@"Done!");
}];
但这似乎并没有再次调用 arc4random() 来重置持续时间......即云只会在每次启动应用程序时以随机速度穿过屏幕,而不是每次动画循环时。
然后我尝试使用完成块再次触发动画,如下所示:
-(void)animateMethod
{
[UIImageView animateWithDuration:arc4random() % 10 + 1
delay:0.0
options:UIViewAnimationOptionCurveLinear
animations:^{
//moving the cloud across the screen here
}
completion:^(BOOL finished) {
NSLog(@"Done!");
[self animateMethod];
}];
}
这给了我我正在寻找的效果,但是当我使用导航控制器推送到另一个视图时,完成块似乎在一个无休止的循环中被触发(我的日志被垃圾邮件“完成!”)
任何人都知道获得所需效果的方法我想要正确的方法吗?