1.tintColor属性
1.1 是什么
是视图中的一个属性,代表自己的颜色。
1.2 能干什么
可以统一管理一个视图中所有子视图和子视图的子视图的颜色。
可以批量修改一些视图的颜色,如果其中的子视图,不想和父视图的颜色一致,可以自行设置,优先取本视图设置的tintColor。
2.UIAppearance
2.1 是什么
是一个协议,遵守此协议的对象可以批量设置某种控件的外观(颜色、贴图)。
2.2 如何获取
任何视图类都有一个方法:
+(instancetype)appearance;
此方法返回的对象会遵守UIAppearance协议。
2.3 如何使用
拿到此对象,就像对普通控件那样,设置颜色、背影等内容,来批量设置某种控件的外观。
如果不满意,可以单独设置。
3.应用的图标和启动画面
在images.xcassets
AppIcon:
58*58(ios6以前)
80*80(ios7) 120*120(ios7)
LaunchImage
640*960(i4/4s)
640*1136(i5/i5s/i5c)
在xcode6中,取消了LaunchImage,使用了xib文件。
launchScreen….xib
注:在项目的配置界面修改
4.手势(GestureRecognizer)
4.1 什么是手势
用户对View进行一些触屏操作。
4.2 有哪些手势
一次性手势:一次只会执行一个方法
Tap : 点、按
Swipe : 轻扫(查看图片)
连续性手势:不断的重复执行一个方法
LongPress : 长按(选择功能,复制、粘贴)
Pan : 拖动 (移动图标)
Pinch : 捏/拨/扩 (放大或缩小)
Rotation : 旋转
4.3 手势的本质
程序中,一个手势其实就是一个对象,用户对视图的操作,就会被操作系统感知,通知视图做相应的操作。
一次手势形成后(系统对手势识别成功),只触发一次事件,调用方法。
连续性手势会连续触发事件,调用多次方法。
4.4 如何使用手势
(1)首先要创建手势对象
(2)然后设置相关属性(不同手势,属性是不同的)
(3)最后将手势加入到需要感知手势的视图中。
每一种手势都有一个类对应,所有的手势类都继承自UIGestureRecognizer,而且子类的全名一般为:
UIXxxxGestureRecognizer,如:
UITapGestuteRecognizer …
4.5 UITapGestureRecognizer 点、按
重要属性:
.numberOfTapsRequired 点击多少次
.numberOfTouchesRequired 用多少个手指点
4.6 UISwipeGesureRecognizer 轻扫、划动
重要属性:
.numberOfTouchesRequired 用多少个手指扫
.direction 扫的方向 上 下 左 右
可以同时指定多个方向(垂直、水平),需要用"|"的方式将多个方向的枚举值合并,虽然支持但无法区分添加的多个方向的手势…支持多手势,使用同一个事件方法。
4.7 UILongPressGestureRecognizer 长按
重要属性:
.numberOfTouchesRequired 用多少个手指扫
.minimumPressDuration 最短多长时间算长按,单位秒。
.allowableMovement 允许在手势识别期间手指可移动的范围。
4.8 UIPinchGestureRecognizer 捏/扩
重要属性:
.scale 捏/扩的倍数
.velocity 速度,捏扩时的速度,负(捏),正(扩)
练习:
界面上有一个UITextView,用来看小说。要求增加手势功能,当老板来时,快速捏(pinch),UITextView就会看不见,老板走了,快速扩(pinch),小说又显示出来了。
如果没有来,捏或扩操作(速度不够快的时候),用来处理放大或缩小字体。
4.9 UIPanGestureRecognizer 拖动
重要属性:
mininumNumberOfTouches 最少几个手指
重要方法:
获取用户当前手指所在位置坐标(相对于起始位置):
-(CGPoint)traslationInView:(UIView *)view;
获取用户当前拖动的方向和速度
-(CGPoint)velocityInView:(UIView *)view;
从父类继承的方法,返回绝对位置的坐标
-(CGPoint)locationInView:(UIView *)view;
4.10 UIRotationGestureRecognizer 旋转
重要属性:
.rotation 旋转的弧度(正负可分顺时针还是逆时针旋转)
.velocity 旋转的速度
5.Transform 变形
5.1 变形
可以让一个视图进行旋转、缩放和位移的变化叫变形。改变一个视图的对象属性.transform就可以得到变形的效果。对.transform的属性做不同的改变,可以达到让视图:
旋转(rotation)
缩放(scale)
位移(translation) 这三种效果。
5.2 transform属性
.transform属性是一个类型为CGAffineTransform的结构体,此结构体有6个成员值(float类型),再加上3个固定值,形成了3*3的矩阵(高等数学),这个矩阵中的6个值发生不同的变化,就会导致视图发生不同的变形。(计算机图形学)
5.3 如何使用
理论上,改变.transform属性中的6个值,就可以变形效果,但实际上,很难计算出这6个值,我们一般会借助api来实现变形。
5.4 重点强调
变形和自动布局(AutoLayout)技术是冲突的,所以,如果视图需要变形,那视图就无法使用自动布局。
5.5 具体的实现三种变形:
(1)旋转(rotation)
CGAffineTransFromRotation 创建一个旋转的transform,make的意思从0位置开始旋转。
CGAffineTransFromRotate 在原来旋转的基础之上进行叠加。
三步:
先得到View的Transform属性
在原来的基础上叠加旋转的角度
将计息好的transform赋值给View
注:将手势对象的rotation置0
(2)缩放(Scale)
CGAffineTransformMakeScale 创建一个缩放的transform,从1开始计算。
CGAffineTransformScale(transform,scale,scale)在原来的缩放基础上进行叠加。
sender.scale = 1;
缩放属性通常要与Pinch手势配合使用。
(3)位移
CGAffineTransformTranslate(transform,translation.x,translation.y);
在原来的位移基础上进行叠加
[sender setTranslation:CGPointZero inView:self.View];
CGPointZero 给结构变量赋0值
位移通常要与Pan手势配合使用
一个常量值:CGAffineTransformIdentity
系统定义好的一个常量值,是所有视图对象.transform属性的初始值。
6.5 手势的三种状态:
Began
Changed
Ended
综合练习:
图片查看器:
1>使用代码向view中添加一个UIImageView对象,UIImageView的大小和图片的大小一致。(找一张大图)
2>使用Center属性将imageView移动到屏幕的中间
3>使用transform属性将imageView缩放到屏幕刚好显示图片所有内容,保持宽高比留有白边。
4>对imageView增加rotation手势,支持图片旋转。
5>…增加pinch手势…缩放
6>…增加pan手势…移动
7>…增加tap手势…双击恢复到第三步。
注:self.view
imageView .userinteractionEnabled = YES;
位运算符:
位运算符是对数据值二进制位进行计算的运算符。
& | ^ ~ << >>
数值 移动几位
1 << 0 0001 1
1 << 1 0010 2
1 << 2 0100 4
1 << 3 1000 8
Right = 1 << 0
Left = 1 << 1
UP = 1 << 2
Down = 1 << 3
Right | Left UP|Down
0011 1100
只读 1
写 2
执行 4
111