iPhone/iOS UIView開發總結

來源:互聯網
上載者:User
文章目錄
  • 一.主要參數
  • 二.主要方法
  • 三.螢幕布局(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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.