IOS之UIKit_Day16
day16
回顾:
贴图和美化
1. 程序中的图片
根据设备的不同准备不同大小的图片1X 2X 3X 的多套图片 加到图片的资源库中,系统会自动加载。
第一类:Applicon和LaunchScreen图片,根据系统的提示,加载到指定大小的图片
第二类:应用程序中的图片利用9切片的技术调整大小(不写代码)
2. 针对程序中的美化
2.1 控件的美化
2.2 颜色风格的美化(tintColor UIAppearance )
3. UINavigationBar美化
3.1 左 中 右 三部分的美化
3.2 背景色(barTintColor)
3.3 背景图(竖屏:图片的高度:64点 横屏:52点)
3.4 导航的隐藏
3.5 状态栏的风格设置和状态栏的隐藏
4. UITableViewCell
实现步骤:
a.修改TableView的分割线None
b.修改TableView的背景色为clearColor
c.cell.backgroundView=[[UIImageView alloc]initVithImage:[UIIamageimageName:@"list"]];
今天:
1. 手势:
1.1 什么是手势
用户在View上的一些触屏的操作,诸如 滑动 捏合
1.2 手势的分类
1. 一次性的手势
触屏的动作以后,方法只会响应一次如:点击 解锁
2. 连续性点击
触屏动作发生以后,方法会连连续响应多次如长按 捏合 移动 旋转
1.3 手势的本质
本质是一个对象,用户针对视图发生了一定的动作之后,系统会检测到检测到该动作,并根据具体的动作创建不同种类的手势对象,该对象只会存储于动作有关的一些数据,如触屏动作的坐标,活动的快慢移动的距离
如果发生的是一次性手势动作,那么就调用一次方法如果发生的是连续性手势动作,那么就多次调用响应方法。
1.4 如何使用手势
step1:创建手势对象
step2:设置与该手势相关的属性
step3:将手势对象与需要检测的视图关联在一起
1.5 具体的手势类
所有的手势的父类:UIGestureRecognizer
六种手势:
UITapGestureRecognizer点击一下屏幕
UIPinchGestureRecongnizer捏合屏幕
UISwipeGestureRecongnizer轻扫屏幕
UIPanGestureRecongnizer移动手势
UILongPressGestureRecongnizer长按手势
UIRotationGestureRecongnizer旋转手势
2. 具体的使用
2.1UITapGestureRecognizer (一次性手势)
常用属性:
.numberOfTapsRequired设置点击数
.numberOfTouchesRequired设置触点数
CGPointlocation=[gr locationInView:self.view];获取点击动作时,触点的绝对坐标
2.2UISwipeGestureRecognizer(一次性手势)
常用属性:
.numberOfTouchesRequired触点的个数
.direction轻扫的方向
注意:direction属性为枚举值,并且是可以进行组合的枚举值,多个枚举值之间使用 “|”按位“或”进行运算。
补充:1<<? 表达式的含义是:对于二进制的数字1进行向左移位,符号右侧是几,就向左移动几位。
如果想实现上下左右滑动 那么 就要使用两个UISwipeGestureRecongizer
2.3 UILongPressGestureRecognizer(连续性手势)
常用属性:
//设置最少按下的持续时间
longGR.minimumPressDuration = 1;
2.4 UIPinchGestureRecognizer(连续性手势,捏合)
CGFloatscale = gr.scale; //手势的变化比率,向外扩展时,为大于1的数,向内捏合时,为小与1的数
CGFloatvelocity = gr.velocity;//手势的变化速率,向外扩展时,为正数,向内捏合时,为负数
以上两个属性不是用来设置的,而是在手势发生时用来读取的。
练习:
界面上 有一个UITextView,看小说,增加手势识别,如果快速扩,小说出现,快速捏,小说隐藏,速度不快时,代表放大或缩小小说的文字大
text.View.editable=NO;隐藏交互
textView.hidden=NO;设置隐藏
2.5UIRotationGestureRecognizer (连续性手势,旋转)
常用属性:
CGFloatrotation = gr.rotation;
代表手势旋转的弧度。顺时针旋转时,为正数,逆时针旋转时为负数
2.6UIPanGestureRecognizer(连续性手势,拖动)
常用属性:
//获取移动到的位置在视图坐标系中的绝对位置
CGPointlocation = [gr locationInView:self.view];
//获取移动到的新位置相对于移动动作起始点的坐标的横纵向的偏移
CGPointtranslation = [gr translationInView:self.view];
3.变形(Transform)
3.1 什么是变形
视图发生了位移,缩放。旋转这样的变化
3.2 如何实现变形
可以通过修改视图对象的.transform属相完成变化的效果
位移:translation
缩放:scale
旋转:rotation
3.3 transform属性
类型:CGAffineTransForm类型的结构体
结构体中包含了6个可变的值和3个定值组成的3*3的矩阵,修改了6个数中的某一个或者某几个就可以实现变形,实际上着6个数很难计算,借助于一些系统的API实现数值的改变
3.4 修改transform属性的API
修改位移:CGAffineTransformMakeTranslation();
CGAffineTransformTranslate();
缩放变换:CGAffineTransformMakeScale()
CGAffineTransformTranslate();
旋转: CGAffineTransformMakeRotation()
CGAffineTransformRotate()
重点注意:变形与自动布局是冲突的,所以在使用变形时一定要先关闭AutoLayout,不关闭的,产生的效果无法预计
界面创建后,没有做任何变形之前系统会将每一个试图的当前transform记录倒一个常量中CGAffineTransformIndentity当使用MakeXX()方法进行反射变换,计算新的矩阵,都是基于这个常量进行变形计算的。当使用没用Make的那组方法时,每次计算新的矩阵都是以传入的transform的值作为基准
3.5TransForm属性的初始化常量
CGAffineTransfomIdentity
4.手势+变形
4.1UIPanGestureRecongnizer+实现位移:
a.创建UIPanGestureRecongnizer的实例
UIPanGestureRecognizer*PanGR=[[UIPanGestureRecognizer alloc]initWithTarget:selfaction:@selector(pan:)];
b.添加到视图当中
[self.viewaddGestureRecognizer:PanGR];
c.在pan方法中得到偏移量
CGPointtranslation=[GR translationInView:self.View];
d.设置imageView的移动中点
GPointcenter = CGPointMake(self.imageView.center.x+translation.x,self.imageView.center.y+translation.y);
self.imageView.center = center;
e.设置该次偏移的偏移量为zero
[GRsetTranslation:CGPointZero inView:self.View];
4.2 使用pinch手势实现缩放变形
a.创建实例
UIPinchGestureRecognizer*pinGR=[[UIPinchGestureRecognizer alloc]initWithTarget:selfaction:@selector(pin:)];
[self.viewaddGestureRecognizer:pinGR];
b.在方法中实现 self.imageView.transform=CGAffineTransformScale(self.imageView.transform,GR.scale,GR.scale);
设置缩放起点
GR.scale=1;//不设置缩放量 和缩放手势不一致
4.3 使用Rotation手势实现旋转变形
a.创建Rotation实例
b.在方法中实现
self.imageView.transForm=CGAffineTransFprmRotate(self.imageView.transForm,GR.rotation)
GR.rotation=0;不设置时旋转后和旋转量不一致
4.4 多手势共存的问题:
解决步骤:
a.设置各个手势的代理
b.实现一个方法
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer{
return YES;
}
【综合练习】
图片查看器:
1》使用代码向View中添加一个UIImageView对象,UIImageView的大小和图片大小一致,找一张大图
2》使用center属性将Imageview移到到屏幕的中央
3》使用transform属性将imageview缩放倒屏幕刚好能显示的下正常图片的内容,且保存宽高比
4》对imageView增加rotation手势,支持图片的旋转
5》对imageView增加pinch手势,支持图片的缩放
6》对mageView增加pan手势,支持图片的移动
7》对imageView增加tap手势,床架回到第3步
注意:手势不要添加到self.view添加到图片上,记得打开imageView的用户交互(.userInteractionEnable=YES)