The Runtime Interaction Model for Views

視圖運行時交互模型
蘋果官網的一篇官方文檔。
有以下內容:

  1. 用戶觸控屏幕
  2. 硬件對用戶的觸控事件報告給UIKit框架
  3. UIKit框架打包觸控事件為一個UIEvent的類,然后把它分發到一個合適的view
  4. 你的view的響應事件代碼對這個事件作出響應
    具體有:
    ?調整視圖或其子視圖的屬性變量(邊框、邊界、透明度等)。
    ?將視圖(或其子視圖)標識為需要修改布局。
    ?將視圖(或其子視圖)標識為布局需要重畫。
    ?將數據發生的變化通報給控制器。
  5. 如果一個view的坐標由于某些原因發生改變,UIKit框架會更新她的子view,但會遵循下面的規則:
    ?如果你為你的views設定了autoresizing的規則,那么UIKit會根據這些規則自動調整每一個view
    ?如果這些view實現了layoutSubviews的方法,UIKit框架會調用。(LayoutSubviews會調用設置好的constraints去設置你的view,還有子類能重寫這方法。)
  6. 如果一個view 的任一部分需要被重繪,UIKit會請求這個view自行重繪。一般的視圖都會顯式的定義了drawRect:,UIKit會調用這個方法。
  7. 任何更新的視圖都會聯合剩余應用可視部分并且發送到圖形硬件顯式。
  8. 圖形硬件把修改的內容傳遞到屏幕上

基于上述的步驟說明可以看出,UIKit為您自己定制的視圖提供如下主要的結合點: 下面這些事件處理方法:

?touchesBegan:withEvent:
?touchesMoved:withEvent:
?touchesEnded:withEvent:
?touchesCancelled:withEvent:

  1. layoutSubviews方法
  2. drawRect:方法大多數定制視圖通過實現這些方法來得到自己期望的行為。您可能不需要重載所有方法,舉例來說,如果您實現的視圖是固定尺寸的,則可能不需要重載layoutSubviews方法。類似地,如果您實現的視圖只是顯示簡單的內容,比如文本或圖像,則通常可以通過簡單地嵌入UIImageView和UILabel對象作為子視圖來避免描畫。重要的是要記住,這些是主要的結合點,但不是全部。UIView類中有幾個方法的設計目的就是讓子類重載的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容