Viewday03

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值