iOS CoreAnimationターンフィールドアニメーションCATransition


参考資料:http://www.cnblogs.com/kenshincui/p/3972100.html#autoid-3-0-0まとめ:
効果:iOS CoreAnimation 转场动画 CATransition_第1张图片 iOS CoreAnimation 转场动画 CATransition_第2张图片
iOS CoreAnimation 转场动画 CATransition_第3张图片
ターンフィールドアニメーションとは、あるシーンから別のシーンにアニメーションで移行することです.回転アニメーションの使用は一般的に以下のステップに分けられる:1.ターンフィールドアニメーションCATransition 2を作成します.ターンテーブルタイプtranstionを設定します.type、サブタイプtranstion.subtype(オプション)およびその他の属性3.ターンオーバー後の新しいビューを設定し、アニメーションをレイヤーの下の表に追加すると、一般的なターンオーバータイプがリストされます(プライベートAPIはアップル公式に公開されていないアニメーションタイプですが、現在も使用可能です):*公開のAPI*fadeフェードアウト効果kCATransitionFade movein新しいビュー古いビューに移動kCATransitionMoveIn push新しいビュー古いビューを終了kCATransitionPush reveal古いビューを移動新しいビューkCATransitionRevealプライベートAPI cube立体反転効果oglFlip反転効果sを表示uckEffect収縮効果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