常见的动画效果(二)

        需引入 QuartzCore.framework , 并在相关文件中加入  #import "QuartzCore/QuartzCore.h"

定义

         shakeFeedbackOverlay为UIImageView

设置

         self.shakeFeedbackOverlay.alpha = 0.0;

         self.shakeFeedbackOverlay.layer.cornerRadius = 10.0; //设置圆角半径

1、图像左右抖动

    CABasicAnimation* shake = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

    shake.fromValue = [NSNumber numberWithFloat:-M_PI/32];

    shake.toValue = [NSNumber numberWithFloat:+M_PI/32];

    shake.duration = 0.1;

    shake.autoreverses = YES; //是否重复

    shake.repeatCount = 4;

    [self.shakeFeedbackOverlay.layer addAnimation:shake forKey:@"shakeAnimation"];

    self.shakeFeedbackOverlay.alpha = 1.0;

    [UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction animations:^{ self.shakeFeedbackOverlay.alpha = 0.0; //透明度变0则消失 } completion:nil];

2、图像顺时针旋转

    CABasicAnimation* shake = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

    shake.fromValue = [NSNumber numberWithFloat:0];

    shake.toValue = [NSNumber numberWithFloat:2*M_PI];

    shake.duration = 0.8; shake.autoreverses = NO;

    shake.repeatCount = 1;

    [self.shakeFeedbackOverlay.layer addAnimation:shake forKey:@"shakeAnimation"];

    self.shakeFeedbackOverlay.alpha = 1.0;

    [UIView animateWithDuration:10.0 delay:0.0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction animations:^{ self.shakeFeedbackOverlay.alpha = 0.0; } completion:nil];

3、图像关键帧动画 

    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];

    CGMutablePathRef aPath =CGPathCreateMutable();

    CGPathMoveToPoint(aPath, nil, 20, 20);

    CGPathAddCurveToPoint(aPath, nil, 160, 30, 220, 220, 240, 420);

    animation.path = aPath;

    animation.autoreverses = YES;

    animation.duration = 2;

    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

    animation.rotationMode = @"auto";

    [ballView.layer addAnimation:animationforKey:@"position"];

4、组合动画 CAAnimationGroup 

    CABasicAnimation *flip = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];

    flip.toValue = [NSNumbernumberWithDouble:-M_PI];

    

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

    scale.toValue = [NSNumbernumberWithDouble:12];

    scale.duration = 1.5;

    scale.autoreverses = YES;

    

    CAAnimationGroup  *group = [CAAnimationGroup animation];

    group.animations = [NSArray arrayWithObjects:flip, scale,nil];

    group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    group.duration = 3;

    group.fillMode = kCAFillModeForwards;

    group.removedOnCompletion =NO;

    [ballView.layer addAnimation:groupforKey:@"position"];

5、指定时间内旋转图片

//启动定时器旋转光圈

- (void)startRotate

{

    self.rotateTimer = [NSTimer scheduledTimerWithTimeInterval:0.02

                                                  target:self

                                                selector:@selector(rotateGraduation)

                                                userInfo:nil

                                                 repeats:YES];

}

//关闭定时器

- (void)stopTimer

{

    if ([self.rotateTimerisValid])

{

        [self.rotateTimerinvalidate];

        self.rotateTimer =nil;

    }

}

 

//旋转动画

- (void)rotateGraduation

{

    self.timeCount--;

    if (self.timeCount == 0)

    {

        [self stopTimer];

        // doSomeThing //旋转完毕 可以干点别的

        self.timeCount = 25;

    }

    else

    {

        //计算角度 旋转

        static CGFloat radian = 150 * (M_2_PI / 360);

        CGAffineTransform transformTmp =self.lightImageView.transform;

        transformTmp = CGAffineTransformRotate(transformTmp, radian);

        self.lightImageView.transform= transformTmp;

    };

}

调用方法

self.timeCount = 25; //动画执行25次

[self startRotate]; 

注:本文部分代码摘抄自《ios5核心框架》一书,原文有改动

6:移动图片到右下角

//向右下角缩小移动
- (IBAction)buttonClick:(id)sender
{
    
    CGPoint fromPoint = imageView.center;
    
    //路径曲线
    UIBezierPath *movePath = [UIBezierPath bezierPath];
    [movePath moveToPoint:fromPoint];
     CGPoint toPoint = CGPointMake(300, 460);
    [movePath addQuadCurveToPoint:toPoint
                     controlPoint:CGPointMake(toPoint.x,fromPoint.y)];
    
   //关键帧
    CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    moveAnim.path = movePath.CGPath;
    moveAnim.removedOnCompletion = YES;
    
    //旋转变化
    CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
    scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    //x,y轴缩小到0.1,Z 轴不变
    scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
    scaleAnim.removedOnCompletion = YES;
    
    //透明度变化
    CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"alpha"];
    opacityAnim.fromValue = [NSNumber numberWithFloat:1.0];
    opacityAnim.toValue = [NSNumber numberWithFloat:0.1];
    opacityAnim.removedOnCompletion = YES;
    
    //关键帧,旋转,透明度组合起来执行
    CAAnimationGroup *animGroup = [CAAnimationGroup animation];
    animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim,opacityAnim, nil];
    animGroup.duration = 1;
    [imageView.layer addAnimation:animGroup forKey:nil];
} 

7 :移动图片到右下角

 //向右边旋转
- (IBAction)rightRotateBtnClick:(id)sender
{
    CGPoint fromPoint = imageView.center;
    UIBezierPath *movePath = [UIBezierPath bezierPath];
    [movePath moveToPoint:fromPoint];
    CGPoint toPoint = CGPointMake(fromPoint.x +100 , fromPoint.y) ;
    
    [movePath addLineToPoint:toPoint];
    
    CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    moveAnim.path = movePath.CGPath;

    CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
    scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    
    //沿Z轴旋转
    scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,0,0,1)];
    
    //沿Y轴旋转
   // scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,0,1.0,0)];
    
   //沿X轴旋转
  // scaleAnim.toValue = [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI,1.0,0,0)];
    scaleAnim.cumulative = YES;
    scaleAnim.duration =1;
  //旋转2遍,360度    
    scaleAnim.repeatCount =2;
    imageView.center = toPoint;
    scaleAnim.removedOnCompletion = YES;
    CAAnimationGroup *animGroup = [CAAnimationGroup animation];
    animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim, nil];
    animGroup.duration = 2;
    
    [imageView.layer addAnimation:animGroup forKey:nil];

}

8图片旋转360度

//图片旋转360度
- (IBAction)rota360BtnClick:(id)sender
{
    CABasicAnimation *animation = [ CABasicAnimation
                                   animationWithKeyPath: @"transform" ];
    animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    
    //围绕Z轴旋转,垂直与屏幕
    animation.toValue = [ NSValue valueWithCATransform3D: 

CATransform3DMakeRotation(M_PI, 0, 0, 1.0) ];
    animation.duration = 1;
    //旋转效果累计,先转180度,接着再旋转180度,从而实现360旋转
   animation.cumulative = YES;
   animation.repeatCount = 2;
    
    //在图片边缘添加一个像素的透明区域,去图片锯齿
    CGRect imageRrect = CGRectMake(0, 0,imageView.frame.size.width, imageView.frame.size.height);
    UIGraphicsBeginImageContext(imageRrect.size); 
    [imageView.image drawInRect:CGRectMake(1,1,imageView.frame.size.width-2,imageView.frame.size.height-2)];
    imageView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
   [imageView.layer addAnimation:animation forKey:nil];
}

你可能感兴趣的:(常见的动画效果(二))