我想让UIImageView
闪烁几次。
目前我不知道该怎么做。
-(void)arrowsAnimate{
[UIView animateWithDuration:1.0 animations:^{
arrow1.alpha = 1.0;
arrow2.alpha = 1.0;
arrow3.alpha = 1.0;
NSLog(@"alpha 1");
} completion:^(BOOL finished){
[self arrowsAnimate2];
}];
}
-(void)arrowsAnimate2{
[UIView animateWithDuration:1.0 animations:^{
arrow1.alpha = 0.0;
arrow2.alpha = 0.0;
arrow3.alpha = 0.0;
NSLog(@"alpha 0");
} completion:^(BOOL finished){;}];
}
稍后我称之为:
for (int i = 0;i < 10; i++){
[self arrowsAnimate]; }
这给了我10x alpha 1,然后是10x alpha 0.在中间我们只看到一个动画。 有什么建议吗?
感谢。
答案 0 :(得分:20)
有一种更简单的方法可以仅使用1个动画块来实现闪烁动画:
aview.alpha = 1.0f;
[UIView animateWithDuration:0.5f
delay:0.0f
options:UIViewAnimationOptionAutoreverse
animations:^ {
[UIView setAnimationRepeatCount:10.0f/2.0f];
aview.alpha = 0.0f;
} completion:^(BOOL finished) {
[aview removeFromSuperview];
}];
诀窍是使用[UIView setAnimationRepeatCount:NTIMES/2]; *_inside_* your animation block
。
无需额外的功能或额外的循环。
答案 1 :(得分:3)
使用
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
并在您的选项中传递UIViewAnimationOptionRepeat
和UIViewAnimationOptionAutoreverse
。您不需要提供完成块,只需要执行第一个动画。
编辑:这是一个无限期淡入淡出的图像示例代码。
[UIView animateWithDuration:1.0
delay:0.0
options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)
animations:^{
self.myImageView.alpha = 1.0;
}
completion:NULL];
编辑2:我发现你实际上只需要闪10次。实际上,我无法用块来做到这一点。执行完成块后,动画似乎立即完成剩余的9次。然而,我能够很容易地用旧式动画做到这一点。
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:10.0];
[UIView setAnimationRepeatAutoreverses:YES];
self.myImageView.alpha = 1.0;
[UIView commitAnimations];
编辑3:我找到了一种用块来做到这一点的方法。
- (void)animate
{
if (self.animationCount < 10)
{
[UIView animateWithDuration:1.0
animations:^{
self.myImageView.alpha = 1.0;
}
completion:^(BOOL finished){
[self animateBack];
}];
}
}
- (void)animateBack
{
[UIView animateWithDuration:1.0
animations:^{
self.myImageView.alpha = 0.0;
}
completion:^(BOOL finished){
self.animationCount++;
[self animate];
}];
}
答案 2 :(得分:1)
当您的应用程序在闪烁时变为背景和前景时,上方闪烁可能不起作用。 您可以使用透明图像和实际图像来设置ImageView
,而不是这些UIImageView *imageview=[UIImageView new];
imageview.animationDuration=1;
imageview.animationImages = your array of images;
[imageview startAnimating];
答案 3 :(得分:0)
您需要等待动画完成才能启动新动画。您可以在animate2中链接完成块以返回动画,并根据计数器属性停止,在动画/完成块中实现循环而不是单独的循环。