ios-day18-08(使用CABasicAnimation實現對UIView的平移、旋轉、縮放)
阿新 • • 發佈:2019-02-19
// // 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