iOS開發之自己封裝乙個progressHUD控制項

2022-05-29 23:45:20 字數 2285 閱讀 7351

看了幾個輕量級的progress view

我覺得kvnprogress做的最漂亮吧

突然我想為什麼我自己不封裝乙個控制項

然後我研究了一下kvnprogress

kvn簡單的介面是由storyboard搭建的

呼叫了最簡單的showwithstatus,然後用reveal檢視了一下

然後看了xcode的結構才發現,loading view 本來是uiview,但是繼承自uiimageview,所以在reveal中顯示uiimageview

再來看一下分層結構

父檢視本來是uiview

然後我就開始模仿寫乙個

我是想用純**搭建介面,到時候呼叫的時候只需要使用乙個類檔案

我們先來看動畫實現部分

剛開始看kvnprogress的時候我還以為他是使用搭建的介面

成功

失敗

進度

檢視了他的**才發現,根本沒有,全是用純**做的動畫

用的是 貝塞爾曲線 做的。 又學到東西了。

/*其實剛開始我的思路是用圖形上下文畫個圈,然後用乙個圓圈動畫的遮罩那部分缺掉的部分

最後可以實現這個動畫 但是封裝起來效果達不到 所以實現我還是用貝塞爾曲線做 */

思路是用貝塞爾曲線畫乙個有缺口的圓,然後讓這個有缺口的圓轉動起來

建立乙個帶缺口的圓

建立乙個路徑 center是中心,radius是半徑,startangle是開始的角度,endangle是結束的角度,clockwise的順時針

再把建立好的貝塞爾路徑設定屬性

設定顏色,strokecolor邊緣的顏色,fillcolor是中間填充的顏色,linewidth是線段的粗細

引數我用的都是kvn的引數

然後再新增進去

這時候就建立了乙個有缺口的圓了

這時候我們要讓他開始轉動

用cabasicanimation

animationwithkeypath:@"transform.rotation.z" 意思是讓z軸轉動,即x和y軸不轉

rotationaniamtionduration是動畫的速度

tovalue是變成什麼值,repeatcount是重複的次數

然後把動畫新增到圓圈檢視的layer

還有 我是用**建立的介面 所以要記得把圓圈檢視add到父檢視

這樣動畫就做好了

剩下的幾個動畫也是用貝塞爾曲線做到,這裡就不詳細說了

說下封裝

我覺得乙個progress view的基本功能就是 要顯示loading的時候 當然不能少文字說明

還有就是成功和失敗的時候

所以我封裝了這幾種方法

然後建立單例

再建立乙個方法

讓所有類方法 通過單例呼叫這個例項方法

這個例項方法的作用就是判斷需要哪一種動畫

接下來就在每個方法裡實現動畫就行了

還有kvn沒有提供檢視的一些自定義方法

我這裡也舉一些例子

例如我要改變圓圈的線的粗細,或者顏色,控制動畫的速度

這時候我定義類方法

再通過單例賦值就行了

這樣就封裝完了

我看了一下 這乙個類才22kb 非常非常小 而且實現了這麼多動畫效果

iOS 開發之封裝

繼承,封裝,多型是物件導向程式設計的三大基石 在ui 中,封裝可以降低 的冗餘度,節省 量,避免了重複 在這裡簡單的封裝了乙個label和乙個textfield,組成了乙個登陸介面的樣式 新建了乙個檢視,這是檢視的.h檔案,這個檢視的一些方法 這個是.m檔案中 對label和textfield進行布...

自己封裝的乙個GridView控制項

效果如圖 使用方法 void viewdidload cgfloat gridview mygridview gridview heightofrow nsinteger row nsinteger numberofgridview mygridview gridview void gridview...

自己封裝的乙個MySQL類

import pymysql import logging 獲取logger的例項 logger logging.getlogger lzjf 指定logger的輸出格式 formatter logging.formatter asctime s levelname s message s 檔案日誌...