視圖運(yùn)行時(shí)交互模型
蘋果官網(wǎng)的一篇官方文檔。
有以下內(nèi)容:
- 用戶觸控屏幕
- 硬件對(duì)用戶的觸控事件報(bào)告給UIKit框架
- UIKit框架打包觸控事件為一個(gè)UIEvent的類,然后把它分發(fā)到一個(gè)合適的view
- 你的view的響應(yīng)事件代碼對(duì)這個(gè)事件作出響應(yīng)
具體有:
?調(diào)整視圖或其子視圖的屬性變量(邊框、邊界、透明度等)。
?將視圖(或其子視圖)標(biāo)識(shí)為需要修改布局。
?將視圖(或其子視圖)標(biāo)識(shí)為布局需要重畫。
?將數(shù)據(jù)發(fā)生的變化通報(bào)給控制器。 - 如果一個(gè)view的坐標(biāo)由于某些原因發(fā)生改變,UIKit框架會(huì)更新她的子view,但會(huì)遵循下面的規(guī)則:
?如果你為你的views設(shè)定了autoresizing的規(guī)則,那么UIKit會(huì)根據(jù)這些規(guī)則自動(dòng)調(diào)整每一個(gè)view
?如果這些view實(shí)現(xiàn)了layoutSubviews的方法,UIKit框架會(huì)調(diào)用。(LayoutSubviews會(huì)調(diào)用設(shè)置好的constraints去設(shè)置你的view,還有子類能重寫這方法。) - 如果一個(gè)view 的任一部分需要被重繪,UIKit會(huì)請(qǐng)求這個(gè)view自行重繪。一般的視圖都會(huì)顯式的定義了drawRect:,UIKit會(huì)調(diào)用這個(gè)方法。
- 任何更新的視圖都會(huì)聯(lián)合剩余應(yīng)用可視部分并且發(fā)送到圖形硬件顯式。
- 圖形硬件把修改的內(nèi)容傳遞到屏幕上
基于上述的步驟說明可以看出,UIKit為您自己定制的視圖提供如下主要的結(jié)合點(diǎn): 下面這些事件處理方法:
?touchesBegan:withEvent:
?touchesMoved:withEvent:
?touchesEnded:withEvent:
?touchesCancelled:withEvent:
- layoutSubviews方法
- drawRect:方法大多數(shù)定制視圖通過實(shí)現(xiàn)這些方法來(lái)得到自己期望的行為。您可能不需要重載所有方法,舉例來(lái)說,如果您實(shí)現(xiàn)的視圖是固定尺寸的,則可能不需要重載layoutSubviews方法。類似地,如果您實(shí)現(xiàn)的視圖只是顯示簡(jiǎn)單的內(nèi)容,比如文本或圖像,則通??梢酝ㄟ^簡(jiǎn)單地嵌入U(xiǎn)IImageView和UILabel對(duì)象作為子視圖來(lái)避免描畫。重要的是要記住,這些是主要的結(jié)合點(diǎn),但不是全部。UIView類中有幾個(gè)方法的設(shè)計(jì)目的就是讓子類重載的