效果:
轉場動畫就是從一個場景以動畫的形式過渡到另一個場景。轉場動畫的使用一般分為以下幾個步驟:
1.創建轉場動畫 CATransition
2.設置轉場類型transtion.type、子類型transtion.subtype(可選)及其他屬性
3.設置轉場後的新視圖並添加動畫到圖層
下表列出了常用的轉場類型(注意私有API是蘋果官方沒有公開的動畫類型,但是目前通過仍然可以使用):
*
公開的API
* fade 淡出效果 kCATransitionFade
movein 新視圖移動到舊視圖上 kCATransitionMoveIn
push 新視圖退出舊視圖上 kCATransitionPush
reveal 移開舊視圖顯示新視圖 kCATransitionReveal
私有的API
cube 立體翻轉效果
oglFlip 翻轉效果
suckEffect 收縮效果
rippleEffect 水滴波紋效果
pageCurl 向上翻頁效果
pageUnCurl 向下翻頁效果
cameralIrisHollowOpen 攝像頭打開效果
cameraIrisHollowClose 攝像頭關閉效果
// // TransitionViewController.m // CAKeyframeAnimation // // Created by 帝炎魔 on 16/5/26. // Copyright © 2016年 帝炎魔. All rights reserved. // #import "TransitionViewController.h" #define IMAGE_COUNT 10 @interface TransitionViewController (){ UIImageView *_imageView; int _currnetIndex; } @end @implementation TransitionViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; // 定義圖片空間 _imageView = [[UIImageView alloc] init]; _imageView.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); _imageView.contentMode = UIViewContentModeScaleAspectFit; _imageView.image = [UIImage imageNamed:@"fish0"]; [self.view addSubview:_imageView]; // 添加手勢 UISwipeGestureRecognizer *left = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwipe)]; left.direction = UISwipeGestureRecognizerDirectionLeft; [self.view addGestureRecognizer:left]; UISwipeGestureRecognizer *right = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipe)]; [self.view addGestureRecognizer:right]; // Do any additional setup after loading the view. } #pragma mark ---- 左掃手勢 - (void)leftSwipe { [self transitionAnimation:YES]; } #pragma mark --- 右掃手勢 - (void)rightSwipe { [self transitionAnimation:NO]; } #pragma mark --- 轉場動畫 /** * 轉場動畫就是從一個場景以動畫的形式過渡到另一個場景。轉場動畫的使用一般分為以下幾個步驟: 1.創建轉場動畫 CATransition 2.設置轉場類型transtion.type、子類型transtion.subtype(可選)及其他屬性 3.設置轉場後的新視圖並添加動畫到圖層 下表列出了常用的轉場類型(注意私有API是蘋果官方沒有公開的動畫類型,但是目前通過仍然可以使用): * 公開的API * fade 淡出效果 kCATransitionFade movein 新視圖移動到舊視圖上 kCATransitionMoveIn push 新視圖退出舊視圖上 kCATransitionPush reveal 移開舊視圖顯示新視圖 kCATransitionReveal 私有的API cube 立體翻轉效果 oglFlip 翻轉效果 suckEffect 收縮效果 rippleEffect 水滴波紋效果 pageCurl 向上翻頁效果 pageUnCurl 向下翻頁效果 cameralIrisHollowOpen 攝像頭打開效果 cameraIrisHollowClose 攝像頭關閉效果 */ - (void)transitionAnimation:(BOOL)isNext { // 1. 創建轉場動畫對象 CATransition *transtion = [[CATransition alloc] init]; // 設置動畫類型, 只能使用字符串 transtion.type = @"cameraIrisHollowClose"; // 設置子類型 if (isNext) { transtion.subtype = kCATransitionFromRight; }else { transtion.subtype = kCATransitionFromLeft; } // 設置動畫時間 transtion.duration = 1.0; // 設置轉場動畫後新的視圖添加 _imageView.image = [self getImage:isNext]; [_imageView.layer addAnimation:transtion forKey:@"KCTransitionAnimation"]; } - (UIImage *)getImage:(BOOL)isNext { if (isNext) { _currnetIndex = (_currnetIndex + 1)%IMAGE_COUNT; }else{ _currnetIndex = (_currnetIndex - 1 + IMAGE_COUNT) %IMAGE_COUNT; } NSString *imageName = [NSString stringWithFormat:@"fish%i", _currnetIndex]; return [UIImage imageNamed:imageName]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end