UIViewController 生命周期

从视图控制器创建,在屏幕上显示视图,再到被销毁的过程。一个生命周期内viewDidLoad只被调用一次。见图一

// 视图控制器在经过alloc 之后,开始生成UIView

- (void)loadView {

[super loadView];

// 加载视图

// 如果有 storyboard 活着 xib, 那么视图控制器就直接获取它里面的UIView

// 若无则需通过 [[UIView alloc] init]; 来生成一个view

// 一般情况下,无需干涉此方法

NSLog(@"加载视图(制作或获取视图):%s",__FUNCTION__);

}

// 视图加载完毕,注意:这个方法执行后,视图还没有显示到屏幕上

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

self.view.backgroundColor = [UIColor redColor];

// 添加一个按钮

UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(100, 150, 180, 40)];

[self.view addSubview:btn];

btn.backgroundColor = [UIColor blueColor];

[btn setTitle:@"跳转到第二页" forState:UIControlStateNormal];

[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

NSLog(@"视图加载完毕:%s",__FUNCTION__);

}

// 视图将要显示到屏幕上

- (void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

NSLog(@"视图将要显示到屏幕上:%s",__FUNCTION__);

}

// 视图显示到了屏幕上

- (void)viewDidAppear:(BOOL)animated {

[super viewDidAppear:animated];

NSLog(@"视图显示到了屏幕上:%s",__FUNCTION__);

}

// 视图将要离开屏幕

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

NSLog(@"视图将要离开屏幕:%s",__FUNCTION__);

}

// 视图离开了屏幕

- (void)viewDidDisappear:(BOOL)animated {

[super viewDidDisappear:animated];

NSLog(@"视图完全离开了屏幕:%s",__FUNCTION__);

// 视图离开后销毁视图

// 此设置仅为观察viewdidload 方法的执行,一般情况下不需要设置

//    self.view = nil;

}

——————————————————————————————

两个视图控制器-两个页面

> 模态方式切换视图控制器。

presentViewController:animated:completion:     // 模态方式呈现另一个视图

dismissViewControllerAnimated:completion:      // 移除被以模态方式呈现的视图

> 页面过渡动画

1.#define定义的常量

kCATransitionFade   交叉淡化过渡

kCATransitionMoveIn 新视图移到旧视图上面

kCATransitionPush   新视图把旧视图推出去

kCATransitionReveal 将旧视图移开,显示下面的新视图

2.用字符串表示

pageCurl            向上翻一页

pageUnCurl          向下翻一页

rippleEffect        滴水效果

suckEffect          收缩效果,如一块布被抽走

cube                立方体效果

oglFlip             上下翻转效果

——————————————————————————————

动画

<一>  UIView(UIViewAnimation) 类方法

+ (void)beginAnimations:(nullable NSString *)animationID context:(nullable void *)context;  // additional context info passed to will start/did stop selectors. begin/commit can be nested

+ (void)commitAnimations;                                                 // starts up any animations when the top level animation is commited

// no getters. if called outside animation block, these setters have no effect.

+ (void)setAnimationDelegate:(nullable id)delegate;                          // default = nil

+ (void)setAnimationWillStartSelector:(nullable SEL)selector;                // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context

+ (void)setAnimationDidStopSelector:(nullable SEL)selector;                  // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

+ (void)setAnimationDuration:(NSTimeInterval)duration;              // default = 0.2

+ (void)setAnimationDelay:(NSTimeInterval)delay;                    // default = 0.0

+ (void)setAnimationStartDate:(NSDate *)startDate;                  // default = now ([NSDate date])

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve;              // default = UIViewAnimationCurveEaseInOut

+ (void)setAnimationRepeatCount:(float)repeatCount;                 // default = 0.0.  May be fractional

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;    // default = NO. used if repeat count is non-zero

+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState;  // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default).

+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache;  // current limitation - only one per begin/commit block

+ (void)setAnimationsEnabled:(BOOL)enabled;                         // ignore any attribute changes while set.

+ (BOOL)areAnimationsEnabled;

+ (void)performWithoutAnimation:(void (^)(void))actionsWithoutAnimation NS_AVAILABLE_IOS(7_0);

案例一:

//取出动画对象, uv

UIView *uv = [self.view viewWithTag:1];

// 创建一个动画块, 动画块的开始, 第一个为名字,第二个为动画上下文,都可以为nil

[UIView beginAnimations:@"first_ani" context:nil];

// 设置动画的持续时间

[UIView setAnimationDuration:5.0];

// 动画延时

[UIView setAnimationDelay:5];

// 动画执行的次数

[UIView setAnimationRepeatCount:2];

//

uv.center = CGPointMake(50, self.view.frame.size.height-60);

// 变化过程中颜色发生变化

uv.backgroundColor = [UIColor blackColor];

uv.layer.cornerRadius = 20;

// 转圈

uv.transform = CGAffineTransformRotate(uv.transform, M_PI);

uv.transform  =CGAffineTransformScale(uv.transform, 0.4, 0.2);

// 提交动画,使其执行

[UIView commitAnimations];

案例二:

UIView *uv = [self.view viewWithTag:1];

void (^block)(void) = ^(void){

uv.transform = CGAffineTransformRotate(uv.transform, M_PI/3);

// 创建一个动画块, 动画块的开始, 第一个为名字,第二个为动画上下文,都可以为nil

//        [UIView beginAnimations:@"first_ani" context:nil];

//        // 动画延时

//        [UIView setAnimationDelay:5];

//        // 动画执行的次数

//        [UIView setAnimationRepeatCount:2];

//        uv.center = CGPointMake(50, self.view.frame.size.height-60);

// 取出 uv 的 center

CGPoint pt = uv.center;

pt.y -= 20;

uv.center = pt;

};

//实用block 的形式创建动画

[UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:block completion:^(BOOL finished){

NSLog(@"动画完成了");

[UIView animateWithDuration:1 animations:^(void) {

uv.transform = CGAffineTransformRotate(uv.transform, -M_PI/3);

//            uv.center = CGPointMake(150, 40);

CGPoint pt2 = uv.center;

pt2.y += 20;

uv.center = pt2;

//            uv.transform = CGAffineTransformRotate(uv.transform, 2*M_PI/3);

}];

}];

案例三:

一种更简单的方式:transform 平移

// 设置 uv 的 transform,完成平移操作,affine:矩阵,translate:移动

// 改变位置的四种方法:bounds/transform/frame/center

uv.transform = CGAffineTransformTranslate(uv.transform, -50, 0);

// 旋转: Rotate, 第一个参数是 uv 起始位置, M_PI/2 -> 90度

uv.transform = CGAffineTransformRotate(uv.transform, M_PI/4);

// 缩放, 后面两个参数代表 x、y 方向上的倍数

uv.transform = CGAffineTransformScale(uv.transform, 0.5, 0.5);

// 反转

uv.transform = CGAffineTransformInvert(uv.transform);

//设置uv 随子视图的变化而变化

uv.autoresizesSubviews = YES;

//设置uv 的子视图label 以何种模式适应父视图uv 的变化,带位移的枚举可用 | 等

//    lb.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

lb.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

<二>  CALayer 图层级别动画

// 点击事件

- (void)btnClick:(UIButton *)btn {

// 初始化第二视图对象

SecondViewController *secVC = [[SecondViewController alloc] init];

// 创建自定义动画 CALayer 图层级别的

// 过度动画

CATransition *trans = [CATransition animation];

// 动画持续时间

[trans setDuration:2];

// 设置动画的类型

/*

1.#define定义的常量

kCATransitionFade   交叉淡化过渡

kCATransitionMoveIn 新视图移到旧视图上面

kCATransitionPush   新视图把旧视图推出去

kCATransitionReveal 将旧视图移开,显示下面的新视图

2.用字符串表示

pageCurl            向上翻一页

pageUnCurl          向下翻一页

rippleEffect        滴水效

suckEffect          收缩效果,如一块布被抽走

cube                立方体效果

oglFlip             上下翻转效果

*/

//    [trans setType:@"cube"];

[trans setType:@"pageCurl"];

// 动画运动的方向

[trans setSubtype:kCATransitionFromRight];

// 把动画的效果添加到layer 上

[self.view.window.layer addAnimation:trans forKey:@"animal"];

// 以模态方式跳转到第二视图

[self presentViewController:secVC animated:YES completion:^(void){

NSLog(@"视图跳转完成");

}];

// 返回来用:dismissViewControllerAnimated:YES completion:nil

}

转载于:https://www.cnblogs.com/arlenliu/p/5135942.html

iOS 开发学习之 User Interface(4)UIView 与 UIViewController【二】相关推荐

  1. iOS开发学习48 OC的lambda block

    iOS开发学习48 lambda表达式 一.block 简介 二.block使用 1. block的写法大概就是这样: 2. 带参数的话可以这样写: 3. 如果不写入参,可以写: 4. 当然返回也可以 ...

  2. IOS开发学习笔记(一)

    概述: iOS是苹果开发的手持设备操作系统(iPhone,iPad,iPod touch,iPad mini). 基于UNIX,层次架构:核心操作系统层(Core OS)-> 核心服务层(Cor ...

  3. 【IOS 开发学习总结-OC-60】ipad应用开发的一些知识

    [IOS 开发学习总结-OC-60]ipad应用开发的一些知识 ipad与iPhone上 管理有层次的工作流的不同 iPhone上:通过NavigationController,用户可以从上一层界面A ...

  4. ios开发学习-手势交互(Gesture)效果源码分享

    qianqianlianmeng ios开发学习-手势交互(Gesture)效果源码分享 All Around Pull View 介绍:实现视图四个方向(上下左右)都能够拖动更新(pull to r ...

  5. IOS开发学习周报(二)

    IOS开发学习周报(二) 简介 课程名称 IOS开发实训 任课老师 郑贵锋老师&字节跳动工程师 学号 16340015 专业(方向) 软件工程(计应) 姓名 陈彬彬 Email 9441312 ...

  6. IOS开发学习周报(一)

    IOS开发学习周报(一) 学习记录 概括 熟悉在Mac OS下的开发操作,熟悉系统操作.了解相关快捷键以及触摸板快捷操作以便提高后续开发效率. 学习Objective-C相关语法,实操完成螺旋矩阵的算 ...

  7. ios开发学习笔记--Core Motion

    iOS开发学习笔记之CoreMotion-运动传感器 官网文档:CoreMotion Framework Reference 一.     简介 现在的苹果手机都基本有运动传感器,能够过获取到设备的加 ...

  8. IOS开发学习笔记-----UILabel 详解

    IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...

  9. [IOS] iOS开发学习的站点

    iOS开发学习的好站点,纪录在此. http://www.cocoachina.com/ 适合iOS学习入门 开发者中心的内容适合开发时参考 http://code4app.com/ 大量iOS源码 ...

最新文章

  1. 【剑指offer-Java版】14调整数组顺序使奇数位于偶数前面
  2. LeetCode 97交错字符串(动态规划)
  3. Linux学习记录-----《快乐的Linux命令行》.
  4. 【模拟】Biotech
  5. 今天发布了一个新的网站矩阵www.wimatrix.cn
  6. 论文浅尝 | 基于图卷积网络的跨语言图谱实体对齐
  7. IDEA——常用基础设置
  8. Grunt 新手指南
  9. redis配置文件的介绍
  10. NOIP2018游记题解
  11. php生成静态页的方法
  12. 软件测试常用的黑盒测试方法有哪些,简述什么是黑盒测试方法(最常用的黑盒测试方法)...
  13. How to Root Nexus 5 on Android 4.4.4 KTU84P and Install CWM Recovery
  14. 【零基础】入门51单片机图文教程(Proteus+Keil)
  15. mate7 android 6 root权限管理,华为Mate7 Root权限怎么获取 华为Mate7 Root权限获取教程【详解】...
  16. 如何在服务里面删除应用(比如说删除掉服务里面的tomcat)?
  17. oracle得到最大日期,Oracle最大日期获取方法
  18. 【高等数学笔记】证明:闭包一定是闭集
  19. 随笔:使用Windows搭建AAA认证服务器
  20. 在Power BI中用DAX计算现值PV

热门文章

  1. Ubuntu LVS DR模式生产环境部署
  2. HBase1.2.3 数据模型
  3. proxychains-ng 工作原理分析
  4. 针对IE的CSS hack 全面 实用
  5. Ubuntu下GTK的安装、编译和测试
  6. MySQL 数据库插入速度调整
  7. 查看oracle中各个表空间的已使用空间和最大分配空间
  8. php负载均衡慕课网,Nginx实现负载均衡
  9. 将一个日程分割成多个日程_在家庭日程中开展工作的6个技巧
  10. 分布式链接跟踪服务_微服务世界中的分布式跟踪