iOS 關於View的一切

2021-10-09 04:50:00 字數 1935 閱讀 7967

ios 關於view的一切

1、view

view物件是uiview類的例項,用來展示視覺化的內容。檢視物件定義了乙個矩形區域,並且負責該區域內容的繪製、事件的處理及子檢視的布局。每個view物件都對應乙個layer物件,layer物件是calayer的例項,該物件管理著檢視的後台儲存、處理與檢視相關的動畫等等。一般通過檢視的layer屬性可以訪問view對應的layer物件。

使用core animation layer物件對效能有影響。乙個view的繪製**呼叫後,為了之後的重用,core animation快取了繪製的內容。重用繪製內容減少檢視更新時需要的繪圖週期,提高部分效能。

2、view作用

處理多點觸控事件:使用gesture recognizers來響應觸控事件或者直接處理觸控事件

管理子檢視的布局:負責**動態(如果介面旋轉,子檢視可以動態適應這些變化,優雅的展示)**的對子檢視布局,包括對子檢視位置及大小的設定。

避免所有的展示內容在同乙個view中,這樣**難以維護,可以將展示的內容劃分成不同的板塊,每乙個板塊由乙個檢視塊構成,每個檢視塊可以有自己的檢視層次。

3、view層級

乙個檢視加在另乙個檢視上面,那麼這兩個檢視就構成了父檢視與子檢視的關係,子檢視可以覆蓋父檢視的一部分也可以完全覆蓋父檢視,父檢視按照子檢視的新增順序,將子檢視物件存放在陣列中,這樣就構成了檢視層級,父檢視按照子檢視加入的順序來管理子檢視。檢視層級影響子檢視的可見性及對事件的響應。

4、檢視的繪製

(1)檢視繪製過程

view 實現了按需繪製自己展示的內容。當檢視第一次展示自己的內容時, view 根據系統的要求繪製自己要展示的內容;之後,系統捕捉 view 繪製內容並且生成快照,系統使用這個快照來作為 view 的視覺呈現,展現出來。如果之後未對該檢視進行改變,那麼該檢視的繪製**將不再執行,但是如果之後改變了這個檢視,需要呼叫setneedsdisplay 或者 setneedsdisplayinrect 通知系統檢視已經被修改,當前的快照無效,需要在下乙個runloop 進行重新繪製。

系統對 view 的重繪是在下乙個 runloop 中進行的,所以在當前runloop到下乙個runloop開始有一段時間,在這個時間中可以操作檢視層級,比如隱藏、移除某個檢視或者調整檢視的位置、大小等等。這些修改都將在下乙個 runloop 中一起呈現。

(2)重新繪製view

drawrect方法使用注意點

(3)觸發view重新繪製的操作

在執行以上操作後,view 將被標記為重繪,並在下乙個 runloop 中,如果是系統檢視,將呼叫私有方法重新繪製檢視;如果是自定義檢視,將呼叫 drawrect: 重新繪製。

5、執行時檢視的互動模式

(1)uikit和view物件互動過程

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-pyrad1it-1597398352251)(/users/meimei/desktop/drawing_model.png)]

如果view的幾何圖形發生變化,uikit將根據下面規則更新view的子檢視。

如果view實現了layoutsubviews方法,uikit將呼叫這個方法,在這個方法中我們一般調整view和其子檢視的位置及大小。

如果view中一部分子檢視被標記為重畫,uikit將更新檢視。

對於自定義檢視,uikit將呼叫view中的drawrect: **,更新檢視的可見內容,在這個函式中包含的內容應該是重畫檢視的**,不應該做其他事情,例如更改檢視的布局、改變檢視的資料模型等等。對於系統檢視,uikit會在這個時候管理系統檢視的繪製

檢視中的部分子檢視的更新與檢視中其他部分結合,傳送給繪圖硬體,讓硬體來顯示它們。

繪圖硬體在介面繪製這些內容

(2)uikit框架與自定義 view類時的主要互動函式

一切關於相容

1 不同瀏覽器的標籤預設的外補丁和內補丁不同 解決 2 塊屬性標籤float後,又有橫行的margin情況下,在ie6顯示margin比設定的大 解決 在float的標籤樣式控制中加入 display inline 將其轉化為行內屬性 3 設定較小高度標籤 一般小於10px 在ie6,ie7,遨遊中...

關於負載均衡的一切

什麼是負載均衡?負載均衡 load balance 是分布式系統架構設計中必須考慮的因素之一,它通常是指,將請求 資料均勻分攤到多個操作單元上執行,負載均衡的關鍵在於均勻。常見的負載均衡方案有哪些?常見網際網路分布式架構如上,分為 客戶端層 反向 層 站點層 服務層 資料層 可以看到,每乙個下游都有...

關於parseInt函式的一切

parseint 作用是將引數 通常為字串 強制轉換為整數。它有兩個引數,第二個可以省略,我們先展示常見的用法 1.轉換規則 依次將字串中從左到右的數字部分轉為整數,一旦轉換失敗,返回nan。1 引數是字串型別 var a parseint 10 將字串轉成整數型別 console.log a 10...