2013-02-18 113 views
0

我正在使用下面的代码来为一个圆圈设置动画。它不断闪烁,我想延迟动画重启,让我们说5秒。我怎样才能做到这一点?延迟动画iphon

-(void)start 
{  
    [self removeExistingAnimation]; 

    //create the image 
    UIImage* img = [UIImage imageNamed:@"redCircle.png"]; 
    imageView = [[UIImageView alloc] initWithImage:img]; 
    imageView.frame = CGRectMake(0, 0, 0, 0); 
    [self addSubview:imageView]; 

    //opacity animation setup 
    CABasicAnimation *opacityAnimation; 

    opacityAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"]; 
    opacityAnimation.duration = ANIMATION_DURATION; 
    opacityAnimation.repeatCount = ANIMATION_REPEAT; 
    //theAnimation.autoreverses=YES; 
    opacityAnimation.fromValue = [NSNumber numberWithFloat:0.6]; 
    opacityAnimation.toValue = [NSNumber numberWithFloat:0.025]; 
    //resize animation setup 
    CABasicAnimation *transformAnimation; 

    transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 

    transformAnimation.duration = ANIMATION_DURATION; 
    transformAnimation.repeatCount = ANIMATION_REPEAT; 
    //transformAnimation.autoreverses=YES; 
    transformAnimation.fromValue = [NSNumber numberWithFloat:MIN_RATIO]; 
    transformAnimation.toValue = [NSNumber numberWithFloat:MAX_RATIO]; 

    //group the two animation 
    CAAnimationGroup *group = [CAAnimationGroup animation]; 

    group.repeatCount = ANIMATION_REPEAT; 
    [group setAnimations:[NSArray arrayWithObjects:opacityAnimation, transformAnimation, nil]]; 
    group.duration = ANIMATION_DURATION; 

    //apply the grouped animaton 
    [imageView.layer addAnimation:group forKey:@"groupAnimation"]; 
} 

回答

2

做这样的:

-(void)start 
{  
    [self removeExistingAnimation]; 

    //create the image 
    UIImage* img = [UIImage imageNamed:@"redCircle.png"]; 
    imageView = [[UIImageView alloc] initWithImage:img]; 
    imageView.frame = CGRectMake(0, 0, 0, 0); 
    [self addSubview:imageView]; 

    [self doAnimation]; 

    [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doAnimation) userInfo:nil repeats:YES]; 
} 

-(void)doAnimation 
{ 

//opacity animation setup 
    CABasicAnimation *opacityAnimation; 

    opacityAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"]; 
    opacityAnimation.duration = ANIMATION_DURATION; 
    opacityAnimation.repeatCount = ANIMATION_REPEAT; 
    //theAnimation.autoreverses=YES; 
    opacityAnimation.fromValue = [NSNumber numberWithFloat:0.6]; 
    opacityAnimation.toValue = [NSNumber numberWithFloat:0.025]; 
    //resize animation setup 
    CABasicAnimation *transformAnimation; 

    transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 

    transformAnimation.duration = ANIMATION_DURATION; 
    transformAnimation.repeatCount = ANIMATION_REPEAT; 
    //transformAnimation.autoreverses=YES; 
    transformAnimation.fromValue = [NSNumber numberWithFloat:MIN_RATIO]; 
    transformAnimation.toValue = [NSNumber numberWithFloat:MAX_RATIO]; 

    //group the two animation 
    CAAnimationGroup *group = [CAAnimationGroup animation]; 

    group.repeatCount = ANIMATION_REPEAT; 
    [group setAnimations:[NSArray arrayWithObjects:opacityAnimation, transformAnimation, nil]]; 
    group.duration = ANIMATION_DURATION; 

    //apply the grouped animaton 
    [imageView.layer addAnimation:group forKey:@"groupAnimation"]; 

} 

这看起来像脏的方法,但为我工作,跳它帮助你..

+0

不起作用。亲自尝试一下 – 2013-02-18 15:57:08

+0

@MuhammadUmar你用这个动画制作了哪个框架? – Dilip 2013-02-18 16:00:18

+0

QuartzCore。它工作,如果我删除opacityAnimation.duration = ANIMATION_DURATION;和其他动画持续时间,但动画停止时仍然存在一个错误,imageView仍然添加到自我中,我可以看到大红圈。我想删除这个圈子,像atEndAnimation调用函数removeExistingAnimation – 2013-02-18 16:03:41

0

这是不是有点清洁?或者有没有一个原因,你不能使用块进行动画设计?

- (void) start { 
     //create the image 
     UIImage* img = [UIImage imageNamed:@"redCircle.png"]; 
     imageView = [[UIImageView alloc] initWithImage:img]; 
     [self addSubview:imageView]; 

     [self animateWithDelay:0.0]; 
    } 

    - (void) animateWithDelay:(CGFloat)delay { 

     imageView.alpha = 0.0; 
     imageView.transfrom = CGAffineTransformScale(myImage.transform, MIN_RATIO, MIN_RATIO); 
     [UIImageView animateWithDuration:ANIMATION_DURATION delay:delay options:0 animations:^{ 

      imageView.alpha = 1.0; 
      imageView.transfrom = CGAffineTransformScale(myImage.transform, MAX_RATIO, MAX_RATIO); 

     } completion:^{ 
      animationCount++; 
      if (ANIMATION_REPEAT != animationCount) { 
       [self animateWithDelay:5.0]; 
      } 
     }]; 

    } 

你应该在你的类的某个地方定义animationCount,这样你就知道他应该什么时候停止重复。

(未测试,所以可能包含一些错误)