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


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

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

     動畫介紹最近用到的兩個,算是常用級別的,動畫這部分之后會專門研究總結下。

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

     1.Text

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

         不限制UILabel的高度(寬度需要設置,確定文字何時換行),numberOfLines設為0即可(設為0表示不限制行數)。     

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

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

       (3)文字換行模式

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

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

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

        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中輸入字符時動態調整高度即可,以下方法在iOS7、8、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畫各種圖形


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM