老司機工作中用到的自定義控制元件,總有一個適合你的(二)

發表於2016-12-03

時隔半個月,終於來更新第二篇了,大家有木有很期待!


一、一個強大的UITextView分類,讓系統TextView自帶placeholder屬性、自動高度、支援輸入圖片三大功能

1、效果:

功能一、讓系統TextView自帶placeholder屬性

textview9c98786a8816

image

功能二、自動改變高度,類似聊天輸入框

11textviewheightchange

image

功能三、支援輸入圖片

老司機工作中用到的自定義控制元件,總有一個適合你的(二)

image
2、使用方法:

將UITextView+WZB.h和UITextView+WZB.m拖入工程

只需要在需要使用的地方直接匯入標頭檔案UITextView+WZB.h,你的UITextView就擁有了這三大功能

13textview-demo-1

image

如果想要計算高度,只需要呼叫這個方法即可,你需要在block回撥裡手動更改textView的高度

如圖

14textviewheightchange

image

插入圖片的方法如下:

註釋寫的很清楚,效果如下:

老司機工作中用到的自定義控制元件,總有一個適合你的(二)

image
3、實現大致原理:

使用runtime為textView新增如下屬性

監聽

當文字發生變化的時候

新增圖片是用的NSTextAttachment

4、GitHub原始碼地址:UITextView-WZB

二、一句話實現一個可以自動計算年齡和星座的DatePicker

1、效果:

169c98786a88160

普通顯示在介面上

179c98786a88161

從螢幕下邊彈出

189c98786a88162

做鍵盤顯示
2、使用方法:

將WZBDatePicker.h和WZBDatePicker.m拖入工程

只需要在需要使用的地方直接匯入標頭檔案WZBDatePicker.h,然後呼叫下邊這個方法即可

h檔案中提供了這些方法和屬性,註釋寫的很清楚,可以直接使用。

如果做鍵盤顯示,需要這樣:

注意,引數view,必須傳帶有inputView的控制元件,比如UITextField或UITextView等

3、實現大致原理:

裡邊是一個tableView,tableView的headerView是一個label,顯示資訊。tableView的footerView是個UIDatePicker,顯示日期。這樣寫是因為比較好控制中間兩行cell的顯示與隱藏,headerView和footerView也不用單獨管理size

監聽picker的滾動,並重新整理tableView或者呼叫block更新時間,如果是鍵盤,隱藏了中間兩行cell,所以不需要重新整理tableView

如果enableDarkMask為yes,背景顏色變成半透明顏色,並且啟用單擊手勢

4、GitHub原始碼地址:WZBDatePicker

三、一句話實現一個帶有文字閃動漸變的標籤

1、效果:

19wzbgraduallabels

帶有文字閃動漸變的label
2、使用方法:

將WZBGradualLabel.h和WZBGradualLabel.m拖入工程

只需要在需要使用的地方直接匯入標頭檔案WZBGradualLabel.h,然後呼叫下邊這個方法即可

20wzbgraduallabel

效果

下邊是提供的一些屬性和方法

h檔案中提供了這些方法和屬性,註釋寫的很清楚,所有方法可以直接使用。colors是個陣列,可以設定漸變層的顏色,至少傳入兩個值

3、實現大致原理:

219c98786a88161

原理分析

其實看到層級圖,它是有三層的,最底層的label就是你要顯示的label,中間有層紅色的部分,這個其實是漸變層view(截圖沒截好),最上層的label是漸變層的文字

這句話是設定漸變圖層的mask為label圖層,這樣就可以用文字裁剪漸變圖層了,只保留文字的部分

至於動畫改變,我用的是一個UIView動畫,動態改變中間層View和漸變層label的x值,view是新增在底層label上的,上層label是新增在中間view上的,先讓view在父控制元件的最左邊,上層label在此view的右邊,說白了就是讓上層label和底層label完全重合,為了維持這一狀態,中間的view向右走,上層label必須以同樣的值向左走!具體請看程式碼:

kvo監聽這些屬性,也是為了維持上層label和底層label能完全重合的狀態,以便支援使用者對label進行文字對其、文字改變、文字換行、字型大小、frame、換行以及attributedText等操作

4、GitHub原始碼地址:WZBGradualLabel

四、一行程式碼畫一個表格,UIView的分類,可以很簡單的畫擅長表格

1、效果:

很多app用到了這種html元素效果,寫了個demo
效果如下:

229c98786a88161

image
2、使用方法:

只需要一行程式碼 ,可以自定義文字顏色、背景顏色、合併單元格、點選事件等操作

.h檔案中提供了這些方法,用法看註釋即可,getLabelWithIndex:方法是得到第index個格子,比如你有10個格子,[view getLabelWithIndex:0];是得到第一個格子,可以對其進行任何操作,比如我在第三個表格中拿到右邊三個label,新增單擊手勢進行跳轉

3、實現大致原理:

這是核心程式碼,其中做了合併單元格、文字顏色、背景顏色、等判斷。畫線是用的貝塞爾曲線和CAShapeLayer,程式碼在下邊,每個單元格里都建立了label顯示文字。我還提供了方法畫一條直線,相信專案中很多頁面某些位置需要畫一條直線, - (void)wzb_drawLineWithFrame:(CGRect)frame lineType:(WZBLineType)lineType color:(UIColor *)color lineWidth:(CGFloat)lineWidth這個方法能夠很方便的實現這一需求

下邊畫了一下隨機顏色的線條,最終效果是這樣:

239c98786a88160

image
4、GitHub原始碼地址:UIView-WZB

 

相關文章