iOS开发——动画编程OC篇&(四)转场动画

转场 动画

一、转场动画简单介绍

CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点

UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果

属性解析:

type:动画过渡类型

subtype:动画过渡方向

startProgress:动画起点(在整体动画的百分比)

endProgress:动画终点(在整体动画的百分比)

 

二、转场动画代码示例

1.界面搭建

技术分享

2.实现代码

技术分享
 1 //
 2 //  YYViewController.m
 3 //  13-转场动画
 4 //
 5 //  Created by apple on 14-6-21.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 @property(nonatomic,assign) int index;
13 @property (weak, nonatomic) IBOutlet UIImageView *iconView;
14 
15 - (IBAction)preOnClick:(UIButton *)sender;
16 - (IBAction)nextOnClick:(UIButton *)sender;
17 
18 @end
19 
20 @implementation YYViewController
21 
22 - (void)viewDidLoad
23 {
24     [super viewDidLoad];
25     self.index=1;
26 
27 }
28 
29 - (IBAction)preOnClick:(UIButton *)sender {
30     self.index--;
31     if (self.index<1) {
32         self.index=7;
33     }
34     self.iconView.image=[UIImage imageNamed: [NSString stringWithFormat:@"%d.jpg",self.index]];
35     
36     //创建核心动画
37     CATransition *ca=[CATransition animation];
38     //告诉要执行什么动画
39     //设置过度效果
40     ca.type=@"cube";
41     //设置动画的过度方向(向左)
42     ca.subtype=kCATransitionFromLeft;
43     //设置动画的时间
44     ca.duration=2.0;
45     //添加动画
46     [self.iconView.layer addAnimation:ca forKey:nil];
47 }
48 
49 //下一张
50 - (IBAction)nextOnClick:(UIButton *)sender {
51     self.index++;
52     if (self.index>7) {
53         self.index=1;
54     }
55         self.iconView.image=[UIImage imageNamed: [NSString stringWithFormat:@"%d.jpg",self.index]];
56     
57     //1.创建核心动画
58     CATransition *ca=[CATransition animation];
59     
60     //1.1告诉要执行什么动画
61     //1.2设置过度效果
62     ca.type=@"cube";
63     //1.3设置动画的过度方向(向右)
64     ca.subtype=kCATransitionFromRight;
65     //1.4设置动画的时间
66     ca.duration=2.0;
67     //1.5设置动画的起点
68     ca.startProgress=0.5;
69     //1.6设置动画的终点
70 //    ca.endProgress=0.5;
71     
72     //2.添加动画
73     [self.iconView.layer addAnimation:ca forKey:nil];
74 }
75 @end
技术分享

点击上一张,或者下一张的时候,展示对应的动画效果。

技术分享

 

单视图转场

 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4 
 5     // 实例化imageView
 6     UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
 7     UIImage *image = [UIImage imageNamed:@"1.jpg"];
 8     [imageView setImage:image];
 9     
10     [self.view addSubview:imageView];
11     
12     self.imageView = imageView;
13     
14     // 3. 初始化数据
15     NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:9];
16     
17     for (NSInteger i = 1; i < 10; i++) {
18         NSString *fileName = [NSString stringWithFormat:@"%d.jpg", i];
19         UIImage *image = [UIImage imageNamed:fileName];
20         
21         [arrayM addObject:image];
22     }
23     
24     self.imageList = arrayM;
25 }
26 
27 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
28 {
29     [UIView transitionWithView:self.imageView duration:1.0f options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
30         
31         // 在此设置视图反转之后显示的内容
32         
33         self.imageView.tag = (self.imageView.tag + 1) % self.imageList.count;
34         [self.imageView setImage:self.imageList[self.imageView.tag]];
35     } completion:^(BOOL finished) {
36         NSLog(@"反转完成");
37     }];
38     
39 }

 

多视图转场

 1 /*
 2  双视图转场时,转出视图的父视图会被释放
 3  
 4  强烈建议使用但视图转场,如果单视图转场无法满足需求,通常可以考虑视图控制器的切换
 5  */
 6 - (void)viewDidLoad
 7 {
 8     [super viewDidLoad];
 9 
10     UIView *view2 = [[UIView alloc]initWithFrame:self.view.bounds];
11     [view2 setBackgroundColor:[UIColor blueColor]];
12     self.subView2 = view2;
13     
14     UIView *view1 = [[UIView alloc]initWithFrame:self.view.bounds];
15     [view1 setBackgroundColor:[UIColor redColor]];
16     [self.view addSubview:view1];
17     self.subView1 = view1;
18 }
19 
20 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
21 {
22     // 在双视图转场时,我们可以根据是否有父视图,来判断谁进谁出
23     UIView *fromView = nil;
24     UIView *toView = nil;
25     
26     if (self.subView1.superview == nil) {
27         // 说明subView1要转入
28         toView = self.subView1;
29         fromView = self.subView2;
30     } else {
31         // 说明subView2要转入
32         toView = self.subView2;
33         fromView = self.subView1;
34     }
35 
36     [UIView transitionFromView:fromView toView:toView duration:1.0f options:UIViewAnimationOptionTransitionFlipFromTop completion:^(BOOL finished) {
37         
38         NSLog(@"转场完成");
39         // 每次转场后,会调整参与转场视图的父视图,因此,参与转场视图的属性,需要是强引用
40         // 转场之后,入场的视图会有两个强引用,一个是视图控制器,另一个是视图
41         NSLog(@"sub view 1 %@", self.subView1.superview);
42         NSLog(@"sub view 2 %@", self.subView2.superview);
43     }];
44 }

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。