最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS開發(fā)一個好看的ActionSheet

 更新時間:2018年01月31日 14:57:03   投稿:laozhang  
本篇文章通過代碼分享和圖文形式教給大家用IOS寫一個好看的ActionSheet過程以及注意事項,需要的朋友參考下吧。

背景

在項目開發(fā)中,我們經(jīng)常會遇到這么一種情況:App中某些原生控件滿足不了我們的需求,所以這時候我們需要自定義來讓控件具有自己公司產(chǎn)品的風(fēng)格.在大公司中,有很多原生控件都是被封裝過的,這樣大家在用的時候直接用就好了.自定義控件其實是一件一勞永逸的事情,很好的體現(xiàn)了封裝思想.在做公司的項目中遇到一個經(jīng)常遇到情況,用戶更換頭像彈出ActionSheet,但是設(shè)計效果和原生的又相差較大,所以我選擇自定義封裝,借這個需求,我簡述一下自定義控件的一個過程.首先看下效果圖:

樣式一:

樣式二:

樣式三:

系統(tǒng)自帶ActionSheet

其實個人感覺還是不錯的,無奈與設(shè)計師風(fēng)格不同,所以咱就換唄...

開始前思考

1.實現(xiàn)actionSheet效果選用什么作為載體?

要實現(xiàn)ActionSheet樣式并不難,剛開始想來好幾種控件實現(xiàn)形式,比如可以用UIView結(jié)合UIButton來實現(xiàn),也可以用TableView這個最常用的表視圖來實現(xiàn).比較這兩者發(fā)現(xiàn),UITableView可以根據(jù)其代理實現(xiàn)不同數(shù)量的Sheet單元格,而且還有cell的selecte方法,對于每個sheet單元格的復(fù)雜樣式,我們還可以通過自定義cell來實現(xiàn),相比較Button不僅省去了動態(tài)創(chuàng)建Button數(shù)量的開銷,而且系統(tǒng)封裝性和可擴展性更好.所以選用tableView是一個比較好的選擇.

2.如何封裝提高復(fù)用性?

提高復(fù)用性這一步對于當(dāng)前這個ActionSheet用TableView實現(xiàn)來說很簡單,因為UITableView系統(tǒng)本身就給我自帶了很多代理方法,通過代理方法我們可以控制創(chuàng)建Sheet的分區(qū)數(shù)量以及每個分區(qū)內(nèi)sheet的單元格數(shù)量.

但是作為一個自定義控件,特別是github上好的一些第三方,不僅在功能上有很大的實用性,而且每個功能的使用上也是很簡便,對我們來說使用越簡單,說明封裝性越好,在這里我個人覺得復(fù)用性的東西就是在一些模塊高度封裝的基礎(chǔ)之上的多次代碼延伸,拿這個ActionSheet來說,我最終希望的是當(dāng)別人看到我這個控件之后,只需要關(guān)心你自己的業(yè)務(wù)需求,比如需要創(chuàng)建什么樣式,需要創(chuàng)建多少個sheet單元格,關(guān)心這些就夠了,所以我暴露給你的就是對應(yīng)的給你一個創(chuàng)建樣式,給你一個創(chuàng)建多少個的方法就可以了.當(dāng)然這樣也有缺點,封裝性越好,別人再用的時候再去擴展性就越差,所以,在自定義一個控件的時候要盡可能多考慮到各種需求來提高你封裝的代碼適應(yīng)性.

3.確定思路

使用UITableView+自定義Cell方式,根據(jù)TableView的不同代理方法控制ActionSheet的單元格數(shù)量以及頭部及尾部分區(qū)的樣式.

實現(xiàn)

創(chuàng)建TableView,在此我是將TableView添加在View上

實現(xiàn)TableView相關(guān)代理方法

自定義TableViewCell樣式,并實現(xiàn)不同ActionSheet風(fēng)格

測試

這一步到不是有什么技術(shù)含量,我寫在這里也是為了還原實現(xiàn)這一個Demo的思路,但是這一步其實也很重要,因為測試之后才能知道自己的程序?qū)懙脑趺礃?是否可行,這一步直接會影響到后續(xù)的優(yōu)化.我關(guān)注的點是:

  • 功能是否實現(xiàn)了?
  • 使用起來是否簡單方便?
  • 實現(xiàn)同樣的功能,是否有更好的方法?
  • 不好的地方怎么優(yōu)化?

對以上關(guān)注的點來看,我當(dāng)時寫完之后記錄是這樣的:

  • 功能基本實現(xiàn),但是太單一,擴展性不高
  • 使用起來不方便,初始化代碼復(fù)雜,實現(xiàn)功能點代碼過于分散
  • 代碼邏輯有待改進(jìn),代碼復(fù)用性不強
  • UI處理比較粗糙

優(yōu)化

通過上述測試之后,我把遇到的問題都列出來,然后一一進(jìn)行優(yōu)化.

1.功能單一,擴展性不高

通過上面的截圖能看出來,我希望這個ActionSheet可以自定義不同的樣式,比如頭部和底部字體大小,顏色,高度;單元格字體大小,顏色,背景顏色以及行高,還有單元格不同的樣式,是只需要文字還是需要圖標(biāo)加文字.這些應(yīng)當(dāng)提供給用戶做更多的選擇.但是這些樣式并不是剛需,所以可以作為額外代碼配置.可以單獨設(shè)置某一項,也可以一項都不設(shè)置,那就會以默認(rèn)樣式來展示.通過屬性方式提供給用戶配置更多樣式:

2.使用起來不方便,初始化代碼復(fù)雜,實現(xiàn)功能點代碼過于分散.

對于一個基本控件的初始化,蘋果API給了我們很好的實例,創(chuàng)建時我們最好把這個控件最基本的需求放在初始化方法里,比如創(chuàng)建一個view 我們可以使用

UIView *view = [[UIView alloc] init];

也可以使用

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

這兩種方法都是可以的,但是像TableView創(chuàng)建時,我們使用的

UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) style:(UITableViewStyle)]

這個方法會帶有一個style參數(shù),這時我們就可以很方便快速的創(chuàng)建一個tableView的實例,但是像tableView的backgroundColor這樣的參數(shù)我們就不會放在初始化方法里.對于一個ActionSheet的控件,我將標(biāo)題,單元格標(biāo)題,取消按鈕標(biāo)題以及代理作為初始化方法需要的參數(shù),最終的初始化方法如下:

3.實現(xiàn)同樣的功能,是否有更好的方法?

這個問題可以通過實現(xiàn)過程中遇到的問題相結(jié)合說明,Demo中有一個設(shè)置圓角的屬性,通過設(shè)置圓角可以實現(xiàn)和蘋果官方提供的ActionSheet類似的風(fēng)格,當(dāng)時這個sheet單元格第一個和最后一個都是半邊圓角,但是中間沒有圓角的樣式,我想過要不要通過判斷樣式用背景圖片來實現(xiàn),但是仔細(xì)一想這樣還需要借助美工切圖,在性能差不多的情況下盡量不依賴美工實現(xiàn)我覺得比較可取,所以我又采用了使用貝塞爾曲線定向切圓角的方法來實現(xiàn).

總結(jié)

通過實現(xiàn)這一個ActionSheet,從剛開始想,到功能草草實現(xiàn)再到優(yōu)化,基本上涵蓋了我們自定義控件的一個流程,雖然這只是一個很簡單的Demo,但是即使我們?nèi)ラ_發(fā)自己的SDK,過程也是類似的,我們平時大部分情況下往往忽略了優(yōu)化,其實優(yōu)化這一步真的很重要,不單單是對你整個思路的一個整合提高,更是減少了我們后續(xù)改Bug的幾率.

尾巴

之前在簡書上看到了很多有關(guān)技術(shù)的文章,大家對技術(shù)文章的評論也都是褒貶不一,有的文章寫的很好,大家都大肆贊揚,有的文章寫的很初級,都覺得沒有什么價值.這都對,但是我覺得出發(fā)點是好的,希望能將自己的心得與大家分享,也希望能聽聽大家的高見,最重要的是希望自己能進(jìn)步,能與大家一起進(jìn)步,從一個菜鳥變成大神,希望大家都能成為一名開發(fā)工程師而不是單單的做一名碼農(nóng).

Demo鏈接:

https://github.com/iosweihui/WHActionSheetExample

相關(guān)文章

  • iOS如何為圓角添加陰影效果示例代碼

    iOS如何為圓角添加陰影效果示例代碼

    最近一個項目中需要用到投影的效果,還要是圓角,通過查找相關(guān)的資料終于解決了,所以覺著有必要分享出來,下面這篇文章主要給大家介紹了關(guān)于iOS如何為圓角添加陰影效果的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • iOS動畫解析之支付寶支付打鉤動畫的實現(xiàn)方法

    iOS動畫解析之支付寶支付打鉤動畫的實現(xiàn)方法

    支付寶支付打鉤動畫相信對大家來說都不陌生,這篇文章主要給大家介紹了關(guān)于iOS動畫解析之支付寶支付動畫的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 深入理解IOS控件布局之Masonry布局框架

    深入理解IOS控件布局之Masonry布局框架

    本篇文章主要介紹了深入理解IOS控件布局之Masonry布局框架 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • iOS開發(fā)中最基本的位置功能實現(xiàn)示例

    iOS開發(fā)中最基本的位置功能實現(xiàn)示例

    這篇文章主要介紹了iOS開發(fā)中最基本的位置功能實現(xiàn)示例,需要的朋友可以參考下
    2015-09-09
  • iOS 無卡頓同時使用圓角、陰影和邊框的實現(xiàn)

    iOS 無卡頓同時使用圓角、陰影和邊框的實現(xiàn)

    這篇文章主要介紹了iOS 無卡頓同時使用圓角、陰影和邊框的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • iOS開發(fā)中使用UIWebView 屏蔽 alert警告框

    iOS開發(fā)中使用UIWebView 屏蔽 alert警告框

    這篇文章主要介紹了iOS開發(fā)中使用UIWebView 屏蔽 alert警告框的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • iOS性能優(yōu)化教程之頁面加載速率詳解

    iOS性能優(yōu)化教程之頁面加載速率詳解

    在軟件開發(fā)領(lǐng)域里經(jīng)常能聽到這樣一句話,“過早的優(yōu)化是萬惡之源”,不要過早優(yōu)化或者過度優(yōu)化。下面這篇文章主要給大家介紹了關(guān)于iOS性能優(yōu)化教程之頁面加載速率的相關(guān)資料,需要的朋友可以參考下
    2018-09-09
  • iOS中類似微信紅點顯示功能

    iOS中類似微信紅點顯示功能

    ios中類似微信紅點顯示功能,設(shè)計思路非常簡單,給UIView增加一個分類 所有的視圖都可以根據(jù)需要來進(jìn)行紅點顯示。下面通過實例代碼看下實現(xiàn)方法吧
    2016-12-12
  • iOS 引導(dǎo)頁的鏤空效果實例

    iOS 引導(dǎo)頁的鏤空效果實例

    這篇文章主要介紹了iOS 引導(dǎo)頁的鏤空效果實例的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 如何在iOS上使用MVVM進(jìn)行路由詳解

    如何在iOS上使用MVVM進(jìn)行路由詳解

    這篇文章主要給大家介紹了關(guān)于如何在iOS上使用MVVM進(jìn)行路由的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評論

忻州市| 黑山县| 朝阳市| 乌审旗| 辽阳县| 东丰县| 房产| 耿马| 玛多县| 盐边县| 临邑县| 虞城县| 乌什县| 七台河市| 双峰县| 嘉善县| 七台河市| 自贡市| 昌图县| 汕头市| 昌图县| 丰城市| 香港 | 商城县| 桐柏县| 宝坻区| 临江市| 曲沃县| 静宁县| 新龙县| 潞西市| 英德市| 高台县| 南投市| 甘肃省| 兴文县| 武川县| 琼海市| 怀柔区| 同江市| 贵港市|