[apple文档]UIView 编程指南
来源:互联网 发布:星际战甲udp端口 编辑:程序博客网 时间:2024/05/18 03:32
一.了解view的构成
1.view都有layer
2.每个程序都有个UIWindow,每个view都可以相互添加
3.subview是子视图,superview是父视图
4.view的绘制循环,在需要的时候才会绘制,ios会根据部署的view做一个截图,然后在可能的情况下都复用这个截图。你可以显示的调用setNeedsDisplay或者setNeedsDisplayInRect方法来强制执行绘制。
5.修改一个view的几何形状不会自动使得view进行重绘,view的contentMode决定了重绘的方式,绝大部分的模式只是拉伸或者重新定位了截图而已,而不会重新创建一个新的view
6.修改frame,bounds;设置一个新的transform属性都会触发绘制循环。contentMode的属性详见"UIViewContentMode"。
7.拉伸视图:contentStretch属性,注意contentStretch和contentMode是针对layer.content进行缩放的,并不是针对view的subview,所以要明确
UIView* view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 120, 40)]; view.contentStretch= CGRectMake(0.1,0.1, 0.9, 0.9); //不起作用 //view.backgroundColor=[[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"jiben_c"]]; view.layer.contents=(id )[UIImage imageNamed:@"jiben_c"].CGImage; view.frame=CGRectMake(0, 0, 200, 40);
8.内置动画
属性大致可以分为
形变:frame,bounds,center,transform
颜色:backgroundColor,alpha
内容拉伸:contentStretch
9.frame,bounds,center之间的关系
10.clipsToBounds参数
11.drawRect中可以通过CGContextGetCTM方法获得CTM(current transformation matrix),使用Core Graphics方法来实行变换
12.view的transform如果不是identity的话,请忘记frame参数吧,用center和bound来定位以及确定大小
13.View的交互运行周期
a)用户点击
b)通知UIKit framework
c)UIKit framework把touch事件包装成UIEvent发送给能歌响应的view
d)你的view可能做如下事情:修改view的参数改变其几何形状位置; 你调用setNeedsLayout方法去告诉系统你的view或者subviews需要布局的变换;调用setNeedsDisplay或者setNeedsDisplayInRect:方法去告诉系统需要重绘;提醒controller修改某些数据
e)如果view发生了几何变形,按照如下规则变换。如果设置了自动变换规则,UIKit会根据规则进行调整。如果实现了layoutSubviews的话,这会调用该方法。
f)如果view被标记为需要重绘,则会调用实现了drawRect的方法
g)所有显示的view都会被硬件所绘制
14.自定义view一些常用方法:
touchesBegan:withEvent: ;touchesMoved:withEvent: ; touchesEnded:withEvent: ; touchesCancelled:withEvent: ;
layoutSubview ; drawRect;
可以选择性的实现一些方法,比如说你自己实现了手势辨认,则不需要去覆盖touch相关事件;如果你不会更改view的几何形状,则不用去覆盖layoutSubview方法。
15.高效使用view的小贴士
a)不用每个view都配一个controller
b)最小化的使用自定义绘制
c)利用content mode
e)opaque为true
f)滚动时候绘制的优化,滚动时用缩略图替代,滚动停止再绘制精细的大图
g)避免在已有的control中增加subviews,因为可能影响原来的功能
二.Windows
window比较少用,本文涉及的是一些window的基础知识,用到的时候可以看下;比方说多屏幕编程,跟踪Window的变化三.Views
1.contentScaleFactor:相关介绍是在Drawing and Printing Guide for iOS 的"Supporting High-Resolution Screens"中,主要是绘图时候的比例,因为绘图的时候这个参数直接影响绘图的大小。2.exclusiveTouch:这个声明是当view作为响应链第一响应者时,接收touch时间时,则在任何手指离开屏幕时不会响应其他任何view的响应,但是如果作为响应链一部分的话,则没有效果,此外还发现,如果view1设置了这个属性,view2没有设置,先手指放在view2,然后另外一个手指放在view1,则view1不响应点击,换句话说,这个属性决定了view只能作为第一个响应点击的view。
3.如何创建view(从nib创建,编程方式创建);修改subview的位置(addSubview,insertSubview,bringSubviewToFront,sendSubviewToBack,exchangeSubviewAtIndexWithSubviewAtIndex,removeFromSuperview)
4.添加一个subview到另一个view,父view和子view会调用如下方法,如果你自定义view中实现了相应方法
willMoveToSuperview,willMoveToWindow,willRemveSubview,didAddSubview,didMoveToSuperview,didMoveToWindow
5.window属性是作为root view的父view,它的superview属性为nil
6.坐标转换的方法(convertPoint:fromView:,convertRect:fromView:系列方法)
7.layout布局的触发条件
a)view的bounds发生变化
b)设备发生旋转,通常是root view的bounds发生变化
c)view对应的layer发生变化
d)view 调用setNeedsLayout或者layoutIfNeeded
e)view的layer调用setNeedsLayout
8.自动布局:autoresizesSubviews为YES;autoresizingMask设置常量值;自动调整完后,还会调用layoutSubviews方法来使你有进一步的调整subview的机会。通常用来添加删除view或者layer;对子类调用setNeedsDisplay,setNeesDisplayInRect方法,重绘subview.简单举例,比方说一个很大的scrollview中有个很大的图片,往往不会一下加载,而是裁剪成很多小块显示,scrollView滑动时候,主动调用setNeedsDisplay,scrollview实现layoutSubview,并且在其中将超出屏幕的部分remove掉而绘制在屏幕部分的小图片。
9.提高绘制代码(drawRect),clearsContextBeforeDrawing设YES,opaque设YES
10.动画相关可以看下我关于动画的文章。
- [apple文档]UIView 编程指南
- [apple文档]UIViewController编程指南
- [apple文档]事件编程指南
- Apple Pay编程指南
- Apple TV 编程指南--介绍
- Apple TV编程指南:资源管理
- UIView-iOS-Apple官方文档翻译注释总结
- Apple Watch 编程指南(中文版)
- iOS App集成Apple Pay 编程指南
- Apple Watch 编程指南(中文版)
- Apple TV编程指南:创建Client-Server App
- Apple TV编程指南:检测手势和按钮按压
- iOS App集成Apple Pay 编程指南(中国版)
- iOS学习笔记64-Apple Pay编程指南
- 移动开发:iOS开发者的Apple Pay编程指南
- Apple TV编程指南:使用Apple TV遥控器控制屏幕上的用户界面
- XML 文档注释(C# 编程指南)
- 多线程编程指南(官方文档) iPhone
- 使用GPU加速H.264编码分析
- 民航业务笔记
- 在jsp中用<s:if test />比较两个变量
- 堆栈,堆栈,堆和栈的区别
- web.xml的作用
- [apple文档]UIView 编程指南
- PHP解析json 并获取元素的值
- 枚举小结
- S3C2440 VxWorks移植随笔--MMU配置小问题
- 与国考有关的小学数学题:分苹果
- row_number()voer() 等函数
- android中最常见处理异步任务的组件
- TCP/IP 知识点总结
- SQLite Expert字符间距过大的问题