封裝控制項的原理 未完待續

2021-07-10 10:54:26 字數 1842 閱讀 8996

前言

乙個控制項從外在特徵來說,主要是封裝這幾點:

互動方式

顯示樣式

資料使用

對外在特徵的封裝,能讓我們在多種環境下達到 pm 對產品的要求,並且提到**復用率,使維護工作保持在乙個相對較小的範圍內;而乙個好的控制項除了有對外一致的體驗之外,還有其內在特徵:

靈活性

低耦合易拓展

易維護

通常特徵之間需要做一些取捨,比如靈活性與耦合度,有時候介面越多越能適應各種環境,但是介面越少對外產生的依賴就越少,維護起來也更容易。通常一些前期看起來還不錯的**,往往也會隨著時間加深慢慢「成長」,功能的增加也會帶來新的介面,很不自覺地就加深了耦合度,在開發中時不時地進行一些重構工作很有必要。總之,儘量減少介面的數量,但有足夠的定製空間,可以在一開始把介面全部隱藏起來,再根據實際需要慢慢放開。

自定義控制項在 ios 專案裡很常見,通常頁面之間入口很多,而且使用場景極有可能大不相同,比如乙個 uiview 既可以以**初始化,也可以以 xib 的形式初始化,而我們是需要保證這兩種操作都能產生同樣的行為。本文將會討論到以下幾點:

選擇正確的初始化方式

調整布局的時機

正確的處理 touches 方法

drawrectcalayer 與動畫

uicontrol 與 uibutton

更友好的支援 xib

不規則圖形和事件觸發範圍(事件鏈的簡單介紹以及處理)

合理使用 kvo

如果這些問題你一看就懂的話就不用繼續往下看了。

設計方針

選擇正確的初始化方式

uiview 的首要問題就是既能從**中初始化,也能從 xib 中初始化,兩者有何不同? uiview 是支援 nscoding 協議的,當在 xib 或 storyboard 裡存在乙個 uiview 的時候,其實是將 uiview 序列化到檔案裡(xib 和 storyboard 都是以 xml 格式來儲存的),載入的時候反序列化出來,所以:

當從**例項化 uiview 的時候,initwithframe 會執行;

當從檔案載入 uiview 的時候,initwithcoder 會執行。

如何封裝一組控制項?

比如拿uiscrollview 來講,實現乙個很容易,但是由於我會在專案中多次用到uiscrollview ,所以,需要把它再封裝一次,方便後面呼叫。

如果在多個頁面有相同的**或邏輯這時你就可以考慮分離公共**對它們進行封裝。你這裡的uiscrollview 要看你的需求,如果是只針對uiscrollview的某些公共部分的封裝,你可以直接繼承uiscrollview進行擴充套件。如果是uiscrollivew只是作為控制項封裝的一部分存在,而且還有一些與uiscrollview無關的邏輯,這時你就需要繼承更頂層的uiview來實現你的自定義控制項。

基本流程如下:

**實現:

C語言函式的封裝 未完待續

堅持 成長 每日一篇 返回 1表示讀取失敗,注意返回的資料是帶 n。else if ret 0 else return offset 讀取固定位元組,都到結尾返回已讀子節數,1表示讀取失敗 else if ret 0 else return offset 成功返回連線成功後的套接字,失敗返回 1。i...

nginx 未完待續

yum install y pcre yum install y pcre devel yum install y openssl yum install y openssl devel yum install y zlib yum install y gccyum安裝 yum install y ...

sqlparse(未完待續)

sqlparse.split sql,encoding none sql 包含乙個或多個sql語句的字串 encoding 語句的編碼 可選 sql select from foo select from bar sql list sqlparse.split sql print sql list ...