关键代码如下:
代理文件AppDelegate.h
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface AppDelegate : NSObject <UIApplicationDelegate>
{
    UINavigationController *navController;
    UIWindow *window;
    
@private
    NSManagedObjectContext *managedObjectContext_;//被管理的数据上下文
    NSManagedObjectModel *managedObjectModel_;    //被管理的数据模型
    NSPersistentStoreCoordinator *persistentStoreCoordinator_; //持久化存储助理
}
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;- (NSURL *)applicationDocumentsDirectory;//应用程序沙箱下的Documents目录路径
- (void)saveContext;//保存数据到持久层(数据库)
@endAnimation.h文件
@interface AnimationViewController : UIViewController
{
    UIImageView *blueView;
    UIImageView *greenView;
    
    NSInteger typeID;
}
@property (nonatomic,assign) NSInteger typeID;@property (strong, nonatomic) IBOutlet UIImageView *blueView;
@property (strong, nonatomic) IBOutlet UIImageView *greenView;- (IBAction)btnPressedA:(id)sender;- (IBAction)btnPressedB:(id)sender;@end
Animation.m文件
- (IBAction)btnPressedA:(id)sender
{
    UIButton *button=(UIButton *)sender;
    NSInteger tag=button.tag;
    CATransition *animation=[CATransition animation];
    animation.delegate=self;
    animation.duration=kDuration;
    animation.timingFunction=UIViewAnimationCurveEaseInOut;
    
    switch (tag) {
        case 101:
            animation.type=kCATransitionFade;
            break;
        case 102:
            animation.type=kCATransitionPush;
            break;
        case 103:
            animation.type=kCATransitionReveal;
            break;
        case 104:
            animation.type=kCATransitionMoveIn;
            break;
        case 201:
            animation.type=@"cube";
            break;
        case 202:
            animation.type=@"suckEffect";
            break;
        case 203:
            animation.type = @"oglFlip";
            break;
        case 204:
            animation.type = @"rippleEffect";
            break;
        case 205:
            animation.type = @"pageCurl";
            break;
        case 206:
            animation.type = @"pageUnCurl";
            break;
        case 207:
            animation.type = @"cameraIrisHollowOpen";
            break;
        case 208:
            animation.type = @"cameraIrisHollowClose";
            break;
        default:
            break;
    }
    
    switch (self.typeID) {
        case 0:
            animation.subtype = kCATransitionFromLeft;
            break;
        case 1:
            animation.subtype = kCATransitionFromBottom;
            break;
        case 2:
            animation.subtype = kCATransitionFromRight;
            break;
        case 3:
            animation.subtype = kCATransitionFromTop;
            break;
        default:
            break;
    }
    self.typeID += 1;
    if (self.typeID > 3) {
        self.typeID = 0;
    }
    
    NSUInteger green = [[self.view subviews] indexOfObject:self.greenView];
    NSUInteger blue = [[self.view subviews] indexOfObject:self.blueView];
    [self.view exchangeSubviewAtIndex:green withSubviewAtIndex:blue];
    
    [[self.view layer] addAnimation:animation forKey:@"animation"];
}- (IBAction)btnPressedB:(id)sender
{
    UIButton *button = (UIButton *)sender;
    NSInteger tag = button.tag;
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    [UIView beginAnimations:nil context:context];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:kDuration];
    switch (tag) {
        case 105:
            [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
            break;
        case 106:
            [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
            break;
        case 107:
            [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
            break;
        case 108:
            [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
            break;
        default:
            break;
    }
    
    NSUInteger green = [[self.view subviews] indexOfObject:self.greenView];
    NSUInteger blue = [[self.view subviews] indexOfObject:self.blueView];
    [self.view exchangeSubviewAtIndex:green withSubviewAtIndex:blue];
    
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
}@end