文章目錄
- 一.主要參數
- 二.主要方法
- 三.螢幕布局(subviews)
- 四.自訂UIView
- 五.動畫(animation&transition)
- 參考文檔:
一.主要參數
1.contentMode:定義uiView的填充模式,如:UIViewContentModeLeft、UIViewContentModeScaleAspectFill、特別介紹下UIViewContentRedraw,這個是只要觸發變化(bounds或者transform變化)則就會強制調用drawRect要求重繪,這個參數要少用。
2.contentStretch:在contentMode設定為可展開情況下,則該參數決定展開的範圍,用單位值表示(0.0-1.0)。
3.clipToBounds:是否顯示超出當前view範圍的子view.
4.transform:變形。CGAffineTransform.注意的是transform變形只針對螢幕已經渲染的view以及其subviews,對於沒渲染的是不起作用的,因為每個view只針對自己的bounds進行布局和提供內容。此外如果transform是已經變形過的,則不能用該view的frame來獲得位置以及大小,要使用bounds和center。因為變形後,view的frame就為nil.
5.contentScaleFactor:用於自己high-resolution螢幕的比例,數值大,表示內容在螢幕上的一點所佔的像素越大。
6.tag:從view's tree-list裡獲得view,一個方法是用subviews來搜尋,還有一個就是用viewWithTag來尋找某個指定的view
二.主要方法
1.setNeedsDisplay or setNeedsDisplayInRect: 觸發drawRect方法
2.convertPoint(Rect):fromView: convertPoint(Rect):toView
3.setNeedsLayout or layoutIfNeeded
三.螢幕布局(subviews)
1.觸發重新布局的幾個事件
a)view的bounds發生變化
b)裝置方向發生變化
c)顯示調用view的setNeedsLayout或者layoutIfNeeded,或者某個view的layer的setNeedsLayout方法
d)某個view的layer的sublayers發生變化並需要布局
2.自動布局
a)autoresizesSubviews設定為YES
b)autoresizingMask設定UIViewAutoresizing合適的數值來決定布局
c)即使自動布局完成,也會給你機會手動調整,調用view的layoutSubviews方法
3.手動布局
實現方法layoutSubviews方法,你所做的可能是以下類似的工作
調整subviews的尺寸位置、添加刪除subviews或者對應的layers
每個subviews調用setNeedsDisplay或者setNeedsDisplayInRect來重新繪製view的內容
蘋果文檔中給出了一個布局的例子:
假設一個scrollview有很多view(tile views),當滾動發生時,調用root view的setNeedsLayout方法,在layoutSubviews裡則將下一張圖片顯示在合適的位置,當scroll發生到當前圖片要超過顯示地區的時候,則再調用layoutSubviews把超過螢幕的view給移掉,或者將其放在下一張圖片的位置上。
四.自訂UIView
大致有以下幾個步驟
1.initWithFrame、initWithCoder
2.dealloc
3.drawRect
4.autoresizingMask
5.構建subviews,並且設定合適的autoresizingMask,如果必要,覆蓋layoutSubviews
6.構建touch事件和手勢識別
7.如果需要列印,則drawRect:forViewPrintFormatter:
此外還要根據實際情況設定contentMode,contentStretch,還有CALayer的一些設定(layerClass方法取指定預設的CALayer類型)
五.動畫(animation&transition)
和CALayer區別,在transform上,一個是CATransform3D,另外一個是CAAffineTransform
1.+(void)animateWithDuration
2.+(void)beginAnimations:context
3.+(void)transitionWithView
4.在animation transaction裡,調用+(void)setAnimationTransition:forView:cache 方法
雖然在block裡可以混合使用CAAnimation和UIView animation,但是Apple建議當2者都存在時,盡量只選擇使用CAAnimation來製作動畫。
參考文檔:
View Programming Guide for iOS