我想在iPad上刷一个UIImageview,我该怎么做?

时间:2011-02-18 16:30:54

标签: objective-c ipad uiview

我想让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.在中间我们只看到一个动画。 有什么建议吗?

感谢。

4 个答案:

答案 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

并在您的选项中传递UIViewAnimationOptionRepeatUIViewAnimationOptionAutoreverse。您不需要提供完成块,只需要执行第一个动画。

编辑:这是一个无限期淡入淡出的图像示例代码。

[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中链接完成块以返回动画,并根据计数器属性停止,在动画/完成块中实现循环而不是单独的循环。