1. 程式人生 > >ios-day18-08(使用CABasicAnimation實現對UIView的平移、旋轉、縮放)

ios-day18-08(使用CABasicAnimation實現對UIView的平移、旋轉、縮放)

//
//  JLViewController.m
//  06-核心動畫
//
//  Created by XinYou on 15-4-2.
//  Copyright (c) 2015年 vxinyou. All rights reserved.
//

#import "JLViewController.h"

@interface JLViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;

- (IBAction)rotate;

- (IBAction)translate;

- (IBAction)scale;

- (IBAction)back;
@end

@implementation JLViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
}
/**
 *  旋轉
 */
- (IBAction)rotate {
    
    // 建立動畫物件
    CABasicAnimation *anim = [CABasicAnimation animation];
    
    // 設定動畫物件。keyPath的取值決定了執行怎樣的動畫
    anim.keyPath = @"transform";
    
    
    // anim.fromValue:fromValue表示從什麼值開始改變,預設從原狀態開始改變
    // anim.byValue:變化範圍從fromValue到(fromValue + byValue)
    // anim.toValue:變化範圍從fromValue到toValue
    
    // CATransform3DMakeRotation(angle,x,y,z):以原點O(0,0,0)為起點,A(x,y,z)為結束點
    // 連線OA形成一條直線,以OA所在的直線為旋轉軸進行旋轉,旋轉角度為angle
    anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 1, 0)];
    
    anim.duration = 1.0;
    
    // 下面兩句程式碼的作用:保持動畫執行完畢後的狀態(如果不這樣設定,動畫執行完畢後會回到原狀態)
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    
    // 新增動畫
    [self.iconView.layer addAnimation:anim forKey:@"rotate"];
}
/**
 *  平移
 */
- (IBAction)translate {
    // 建立動畫物件
    CABasicAnimation *anim = [CABasicAnimation animation];
    
    // 修改CALayer的position屬性的值可以實現平移效果
    anim.keyPath = @"position";
    anim.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
    
    anim.duration = 1.0;
    
    // 下面兩句程式碼的作用:保持動畫執行完畢後的狀態(如果不這樣設定,動畫執行完畢後會回到原狀態)
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    
    // 新增動畫
    [self.iconView.layer addAnimation:anim forKey:@"translate"];
}
/**
 *  縮放
 */
- (IBAction)scale {
    
    // 建立動畫物件
    CABasicAnimation *anim = [CABasicAnimation animation];
    
    // 修改CALayer的bounds屬性的值也可以實現縮放效果
    //    anim.keyPath = @"bounds";
    //    anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
    anim.keyPath = @"transform";
    
    // CATransform3DMakeScale(x,y,z):x,y,z表示xyz三個方向的縮放比例
    anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2, 2, 1)];
    
    // 動畫時間
    anim.duration = 1.0;
    
    // 下面兩句程式碼的作用:保持動畫執行完畢後的狀態(如果不這樣設定,動畫執行完畢後會回到原狀態)
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    
    // 新增動畫
    [self.iconView.layer addAnimation:anim forKey:@"scale"];
}
/**
 *  還原
 */
- (IBAction)back {
    
//    [self.iconView.layer removeAnimationForKey:@"translate"];
//    [self.iconView.layer removeAnimationForKey:@"scale"];
//    [self.iconView.layer removeAnimationForKey:@"rotate"];
    
    // 上面3句可以簡寫為1句
    [self.iconView.layer removeAllAnimations];
}

@end