UIView and UIWindow

UIView的下列属性是可以动画的。

  • @property frame 
  • @property bounds 
  • @property center 
  • @property transform 
  • @property alpha 
  • @property backgroundColor 
  • @property contentStretch

UIView 负责展示内容,构造UIVIEW层级。UIWindow不负责显示,他是UIView的容器。UIWIndow一旦创建就一直存在不变了。变化的是显示在里面的UIVIew。有比如,我们链接了外接显示屏,则会创建第二个UIWindow来表示它。

 一个view对象表达了屏幕上的一个矩形区域,负责绘制和响应touch事件,同时可以包含子view完成view的层级表达。大多数我们都是使用UIView,但也可以自定义view.

UIKit的UIView都对应有一个CALayer对象,它是负责view内容的递交和动画的。在他后面是Core Animation rendering Object 和hardware buffer来表达屏幕的实际bits。

core animation layer object对于性能至关重要。绘制view的代码在被执行的时候,结果会被core animation缓存,在之后做重绘的时候,会直接从缓存获取。

 

坐标系变换:

如果想对整个UIView进行线性变换,通过修改transform属性。

如果想对部分UIView进行线性变换,在drawRect方法中通过修改Grpaphic Context。

可以通过修改transform属性实现动画,但是动画都是基于center的。

 

如何让View更有效:

除非必要,不要定制drawing行为

尽可能设置opaque属性为YES。这告诉UIKit在view后面的view是不需要递交绘制的,可以提高性能。

content mode尽量不要使用UIViewContentModeRedraw,这个会导致改UIView不断重绘。在其他模式下,一旦内容被绘制后,会做一个内容的快照,下次再展现UIVIew的内容的时候,不会再次调用Drawing代码,而是使用快照。如果需要重绘,则调用setNeedDisplay或者setNeedDisplayInRect方法,则在runloop的下一次执行时重绘。

滚动时调整drawing行为,例如降低显示质量,等停止滚动再调整回来。

不要UIControl中添加subview,只对修改它提供的属性,否则可能会导致不确定的行为。

 

posted @ 2015-10-26 18:17  怎么也得过啊  阅读(138)  评论(0编辑  收藏  举报