[iOS] 家長閘 (Parental Gate)
實在沒有想太多,就把要給兒童使用的APP送審,結果就是被拒絕 (Reject),原因是沒有注意到iOS 7心的送審規定。這才想起幾個月之前的新聞,有使用者反映小孩子會不小心誤觸應用內購買,建議蘋果可以建立配套措施,沒想到⋯⋯這個兒童防護機制已經實行中!
實在沒有想太多,就把要給兒童使用的APP送審,結果就是被拒絕 (Reject),原因是沒有注意到iOS 7心的送審規定。這才想起幾個月之前的新聞,有使用者反映小孩子會不小心誤觸應用內購買,建議蘋果可以建立配套措施,沒想到⋯⋯這個兒童防護機制已經實行中!
在視圖圓角這篇文章中介紹過,只要是繼承UIView的子類別都可以實現圓角的效果~所以當然TextField和TextView也可以顯示圓角囉!除了可以變成不同程度的圓角,還可以改變框的厚度和顏色。
記憶體管理真的是一個非常重要的議題,處理的好就算記憶體額度有限,也能讓應用程式跑得很順,否則就算給再多的記憶體額度,應用程式依然會崩潰給你看!藉此來研究一下自動釋放池 (Auto Release Pool)。
從網路下載影像,接著顯示在螢幕上,乍聽之下很簡單,卻隱含著許多「眉角」。基於影像容量以及網路速度考量,為了不讓UI卡住,我們勢必得把下載的工作放到非主線程上,在這裡我們叫它為非同步下載影像,一旦下載完畢,回到主線程顯示到螢幕上。
iOS已經寫好的方法,通常我們只要會使用就好,至於實作內容我們就姑且當作沒看到⋯⋯不過在一些情況下,我們很注重效能、效果、效率,原本微不足道的差異或錯誤,將造成「失之毫釐差以千里」的結果。我們就來試驗一下載入來源不同的影像吧~
很多時候在APP顯示的影像是來自網路,這時候我們會想到,若沒有網路時還想顯示影像該怎麼辦?解決方法當然就是在有網路的時候,把目標影像給儲存到手機端,下次顯示時直接取用。
然而此時出現另一個問題,就是從手機端顯示影像,居然會讓體驗變得頓頓的卡卡的,感覺十分不舒服⋯⋯解決辦法就是把影像快取起來,下次顯示時直接拿來用。
之所以頓頓卡卡是因為讀取自「硬碟」,網路下載會先儲存在「記憶體」,前者是在主程序讀取影像,因來源是硬碟,所以不僅耗時較久,連帶又會卡UI;後者在非主程序下載,當下載完才會切換到主程序顯示,來源又是在記憶體,讀取速度較快,因此就不會卡卡頓頓的。
於是我們就發展出三層級顯示影像 (Three-Level Display Image),也就是從網路(伺服器)下載影像到手機端(硬碟),再將影像快取(記憶體)起來顯示!
上一篇影像快取 (Image Cache)我的用法是,從網路下載影像,接著快取起來顯示,跳過儲存到手機端這個步驟,在此我用簡單的if-else說明如何實作!
時常需要從網路上抓取影像載入APP裡頭,尤其是在TableView的cell頻繁消失又出現的狀況,會不停地重複同樣(下載與顯示)的動作,這樣子做不是不行,然而使用者體驗會有點差,儘管已經用多執行緒去抓圖和載圖,操作上還算相當順暢,然而使用者還是會看到影像怎麼這時候消失變出現,接著又滾回去又從消失變出現,使用者體驗實在相當糟糕⋯⋯
於是想當然爾,我們會想要把已經載入的圖給暫存起來,下次要顯示時直接抓暫存在記憶體中的影像快取 (Image Cache)即可!
(繼續閱讀…)
最近一直在研究MPMoviePlayerController,才發現內建的功能不是很完全,若要做到令人滿意的境界,只有客制化一途~
HappyMan・迴響