iOS開發筆記7:Text、UI交互細節、兩個動畫效果等

     Text主要總結UILabel、UITextField、UITextView、UIMenuController以及UIWebView/WKWebView相關的一些問題。html

     UI細節主要總結界面交互開發中遇到的一些細節問題,包括Masonry部分的問題。ios

     動畫介紹最近用到的兩個,算是經常使用級別的,動畫這部分以後會專門研究總結下。正則表達式

     最後介紹兩個工具及三個Xcode使用設置的問題。segmentfault

     1.Text

       (1)UILabel顯示多行文字而且文字置頂顯示

         不限制UILabel的高度(寬度須要設置,肯定文字什麼時候換行),numberOfLines設爲0便可(設爲0表示不限制行數)。     緩存

       (2)使用NSMutableAttributedString知足個性化的顯示要求

        好比對文字的行間距有要求、一行文字某幾個文字的大小、顏色有特殊要求等等,均可以經過NSMutableAttributedString來進行設置。網絡

       (3)文字換行模式

        設置lineBreakMode,好比達到換行條件時按單詞來換行NSLineBreakByWordWrapping,末尾顯示省略號的NSLineBreakByTruncatingTail等。app

       (4)textField的clearButtonMode、placeholder、keyboardType、tintColor、tag、secureTextEntry典型應用場景

         clearButtonMode,設置一鍵清空按鈕顯示模式,通常是在編輯狀態下才顯示該按鈕 ide

        placeholder/attributedPlaceholder,設置佔位文本,若是對樣式有特殊要求,好比顏色等,能夠設置attributedPlaceholder。工具

        keyboardType,設置初始進入編輯狀態時,默認顯示的鍵盤類型 ,好比輸入手機號碼的地方,使用數字鍵盤UIKeyboardTypeNumberPad便可,可是實際使用時發現,若是安裝了第三方輸入法好比搜狗輸入法時,設置UIKeyboardTypeNumberPad不起做用,鍵盤仍然顯示爲其餘類型,設置爲UIKeyboardTypePhonePad則生效,不一樣的是UIKeyboardTypePhonePad相對UIKeyboardTypeNumberPad而言還容許輸入*, #,但基本樣式相同。佈局

        下圖爲設置UIKeyboardTypePhonePad後的鍵盤類型

 

         tintColor,好比對textField的編輯狀態下光標的顏色有要求,設置這個屬性便可。

         tag,對於一個頁面含有多個textField,經常須要在代理方法中進行區別單獨處理,使用tag屬性標明便可,textView等也是經過tag來進行區分 

          secureTextEntry,設置輸入字符的明暗文顯示,設置爲YES輸入字符時則顯示爲*,通常密碼輸入時用到,但須要注意的時,針對系統原生的textField,若是添加了一個明暗文開關按鈕,經過控制該屬性來切換顯示模式時,會有一些問題,一是切換明暗文狀態切換到暗文狀態(secureTextEntry = YES),輸入字符時以前的字符串會狀況,而是暗文狀態下,結束編輯狀態在進入編輯狀態後,若是點擊刪除按鈕,會清空所有已輸入的字符。若是想切換狀態後輸入不清空,再次進入編輯狀態點擊刪除按鈕只刪除前一個字符,須要針對該屬性重寫一下textField。

      

       (5)textField限制輸入字數

         textField不像textView,代理方法中是沒有DidChange事件方法的,可是能夠經過監聽UIControlEventEditingChanged達到一樣效果,進而限制輸入字數

         update:iOS開發筆記12:iOS7上UITextField限制字數輸入致使崩潰問題

       (6)textView更改return鍵類型並自動根據輸入狀況決定改按鍵可用性

          設置兩個屬性便可

       (7)textView如何響應按下發送按鍵的事件

         在代理方法shouldChangeTextInRange中判斷識別處理便可---- if ([text isEqualToString:@"\n"]) {...}

       (8)textView實現textField中的placeholder效果

         textView自己沒有該屬性,實現方法是在textView上添加一個UILabel做爲placeholder,在代理方法中控制該label的顯示狀況,須要注意的是,UILabel若是直接加在textView上,後續調整佈局在iOS7的設備上可能會崩潰,建議將textView加在一個view上,再將UILabel加在此view上進行控制便可。

       (9)textView根據輸入內容高度動態變化

         寫評論時若是字數較多,則textView的高度應該要隨着內容的增長而變高,固然還要有一個高度限制,不能無限制增加。

  

         在textView中輸入字符時動態調整高度便可,如下方法在iOS七、八、9下測試可用

         還有一個須要注意的問題,當再次進入編輯狀態且存有上一次的輸入草稿時,textView的光標通常應該顯示在最後一個字的末尾

      (10)使用正則表達式驗證手機號碼輸入有效性

       一是判斷首位數字是否爲1,二是根據現有狀況判斷第二位數字有效性,三是驗證後續9個字符是否爲數字

 

      (11)自定義長按後彈出的UIMenuController

      (12)UIWebView

         須要注意三點,一是注意在代理方法中設置頂部狀態欄的轉圈,即[UIApplication sharedApplication].networkActivityIndicatorVisible

          二是在willDisappear中須要作一些處理

        

        三是loadRequest的時候注意忽略緩存,不然頁面可能不是最新數據

      (13)WKWebView

         使用的與safari同樣的引擎,iOS8及以上系統建議使用WKWebView取代UIWebView,比UIWebView好用不少,而且支持進度條顯示。 

      (14)獲取鍵盤高度

         當輸入對象被彈出的鍵盤遮擋時,經常須要作上移操做,獲取鍵盤高度是計算移動距離的關鍵之一,能夠在鍵盤通知事件中獲取其高度

      2.UI交互細節

       (1)根據cell顯示內容動態計算高度

        須要注意的是,使用Masonry佈局cell時,必定不要忽略bottom屬性,由於是根據內容撐開的大小來計算高度,才能根據cell裏內容肯定從頂部到底部的距離,即cell的高度。

       (2)使用Masonry更新佈局

         若是使用mas_updateConstraints方法是更新已經設置過的佈局屬性,使用mas_remakeConstraints是清除原有佈局設置,從新佈局。

       (3)點擊空白區域關閉彈框

          對點擊區域進行判斷,當點擊區域在彈框範圍外,進行關閉操做便可

 

       (4)view的層級管理

         最經常使用三個,一是將view移動至最上層

 

        二是將view移動至最下層

        三是將view加載到window上

       (5)使用UIImageView作背景View時注意開啓userInteractionEnabled屬性

        UIImageView默認userInteractionEnabled屬性爲NO,須要開啓,不然在上面添加UIButton後,點擊UIButton是沒法響應的,由於做爲父視圖的UIImageView的userInteractionEnabled屬性爲NO時,觸摸事件是不會繼續往下傳遞給子視圖的,子視圖永遠沒法處理觸摸事件。

       (6)UIButton點擊區域設置

        好比一個很小的圖標須要支持點擊,須要注意增大UIButton的響應區域,考慮用戶的點擊體驗。

       (7)SDWebImage加載進度條顯示

        SDWebImage已經封裝了方法支持監控加載進度

       (8)注意關閉UIPageControl的userInteractionEnabled屬性

        使用輪播圖時注意關閉userInteractionEnabled屬性,不然點擊pageControl區域,小圓點index會變化。

       (9)相冊處理,PHPhotoLibrary取代ALAssetsLibrary,過濾非照片類型數據

         iOS8以上建議用PHPhotoLibrary,使用ALAssetsLibrary當照片數量較多時可能會加載不徹底。

         另外須要注意的是過濾非照片類型的數據,好比視頻等

       (10)使用代碼拉伸圖片

         

       3.兩個動畫

       (1)加載等待轉圈

          選取一張漸變色的加載轉圈圖片,對圖片設置動畫效果

       (2)CAShapeLayer + UIBezierPath實現漸變按鈕 

          使用UIBezierPath畫一個矩形,控制點添加在中間,且注意最後一個點要閉合,根據滑動的距離,控制點的X座標隨之移動變化便可

              

       效果以下

       4.其它

       (1)dSYM

          app使用友盟統計上線後,根據錯誤崩潰信息查找問題可使用「dSYM 」這個工具進行跟蹤處理。

       (2)Network Link Conditioner 

           mac上能夠下載該工具來模擬網絡環境進行測試,在真機上則能夠經過設置裏的開發者選項找到這些工具。

       (3)app啓動後頂部和底部空出黑色區域問題

         因爲設置啓動圖加載方式爲LaunchImage,可是沒有給圖片致使,系統會根據LaunchImage尺寸來決定顯示尺寸,添加LaunchImage後正常顯示

       (4)Xcode升級後,第三方插件沒法使用

         得到Xcode的UUID,添加到插件對應的工程裏,從新運行一遍便可正常使用。

         獲取Xcode的UUID:「defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID」

  

      

       (5)使用代碼塊提升效率

         對於常常重複輸入的一些代碼,好比一些代理方法,佈局代碼等,使用代碼塊進行管理能夠提升效率,對於其中的變量,在設置代碼塊的時候,以<#變量名稱#>這樣的格式設置便可,下次使用時,編譯器就能識別出這裏須要輸入值。

      

       5.參考

     (1)Text Programming Guide for iOS

     (2)AssetsLibrary framework broken on iOS 8

     (3)Network Link Conditioner

     (4)XCODE7 真機調試問題

     (5)iOS開發之詳解正則表達式

     (6)用正則表達式驗證郵箱和手機號

     (7)Understanding and Analyzing iOS Application Crash Reports

     (8)Xcode插件 info.plist/DVTPlugInCompatibilityUUIDs

     (9)dSYM 文件分析工具

     (10)放肆的使用UIBezierPath和CAShapeLayer畫各類圖形

相關文章
相關標籤/搜索