iOS開發筆記10:圓點縮放動畫、強制更新、遠程推送加語音提醒及UIView截屏

    1.使用CAReplicatorLayer製做等待動畫

    CALayer+CABasicAnimation能夠製做不少簡單的動畫效果,以前的博客中介紹的「兩個動畫」,一個是利用一張漸變色圖片+CABasicAnimation製做的等待轉圈動畫,還有一個是利用CAShapeLayer製做的隨移動距離而漸變的按鈕動畫,而此次要製做的圓點縮放動畫用到的是CAReplicatorLayer,CAShapeLayer與CAReplicatorLayer都是CAlLayer的子類,根據不一樣應用場景,可使用不一樣的layer來知足要求。html

    動畫效果如圖:ios

 

 

    實現過程,畫一個圓,複製三份,添加動畫效果便可編程

 

     (1)CAReplicatorLayer之anchorPoint與position之間的關係

    在製做動畫前,須要弄清楚anchorPoint與position之間的關係,對最終將動畫渲染在屏幕上的位置相當重要。segmentfault

   ①position:CAReplicatorLayer的position決定了其在父視圖中位置座標。app

   ②anchorPoint:CAReplicatorLayer的anchorPoint決定了其position的位置。ide

    anchorPoint的默認值爲(0.5, 0.5),此時CAReplicatorLayer在父視圖中座標位置對應其中心點的座標。函數

    而若是想使用父視圖同樣座標系標準,即像添加普通的view同樣設置座標,而不用去考慮計算position在CAReplicatorLayer中心點帶來的影響,將anchorPoint設置爲(0, 0)便可,此時position的位置在CAReplicatorLayer的左上角頂點動畫

    

     (2)CAReplicatorLayer的相關重要參數

    ①instanceCount,CAReplicatorLayer中子元素的份數,ui

    ②instanceDelay,CAReplicatorLayer中子元素動畫執行時延遲時間,spa

    ③instanceTransform,CAReplicatorLayer中子元素形變方式,本例中主要就是X軸方向平移複製。

     (3)初始化CAReplicatorLayer

     如圖所示進行相關初始化,animationDuration爲動畫執行一次的總時間,animationInstanceCount爲拷貝後子元素的個數, instanceDelay = animationDuration / animationInstanceCount 是爲了讓動畫看起來具備連續性

     circle爲動畫中的小圓點,anchorPoint採用默認值,小圓點的中心恰好在animationContainerView的邊界上,因爲須要和animationContainerView邊界左對齊,因此把圓點circle往右移動了一個半徑的距離,以下圖所示,左圖爲不設置偏移的狀況,右圖爲設置偏移後的狀況。

     (4)添加和移除動畫效果

       autoreverses這個參數默認爲NO,這裏設置爲YES,目的是重複執行動畫時,一次動畫執行完畢後,下一次動畫執行相反的效果,即這一次圓點執行縮小的動畫效果,下一次執行放大的動畫效果,這樣循環往復,讓動畫更具連續性,而不是縮小後突兀的就恢復原來大小。

    2.強制更新

      蘋果審覈時不容許帶有版本檢測強制更新功能,若是須要加上強制更新功能以備不時之需,就須要提早設置好。

      方法之一是:在某一時刻請求後臺接口,檢測是否須要強制更新,例如applicationDidBecomeActive的時候,接口中約定好一個關於開啓強制更新的變量以及相關版本號,當須要強制更新時,經過檢測該變量及比較版本號便可經過彈框方式提醒甚至強制用戶去升級,固然這不是一個好的體驗。

    3.遠程推送加語音提醒

      以前博客記錄了關於遠程消息推送的東西,此次要在遠程消息推送基礎上加語音提示,語音提示主要是爲了更方便的提示用戶接收推送信息,例如商家收到美團外賣訂單時,店內會聽到新訂單的語音提示,提醒商家接單。加語音提示主要有如下幾個關鍵點:

     (1)工程相關準備,音頻文件及相關類庫

      在工程裏預先存放語音提示的音頻文件,供接收消息時播放,文件格式必須爲aiff、wav或caf之一,這裏將音頻文件存爲了wav格式使用,且音頻文件播放時長鬚要控制在30秒之內,不然將自動被替換爲默認語音提示。

     本例中使用AVAudioPlayer播放音頻文件,因此須要引入AVFoundation.framework

     (2)後臺推送消息格式

       在aps信息裏的sound對應工程裏存放的音頻文件名,注意後綴,本例中sound對應的文件名沒有加入後綴,而是在代碼中給音頻文件添加後綴。

     (3)注意將AVAudioPlayer實例以屬性方式聲明

      以前在函數中以臨時變量方式聲明AVAudioPlayer並播放音頻文件,一直沒有聲音,後來發現是尚未來得及播放,AVAudioPlayer實例就已經被釋放了,以屬性方式聲明後解決此問題,相關代碼以下

     (4)音量

      仔細辨承認以發現,app在前臺運行時收到推送消息播放語音提示的聲音是要略大於app在後臺運行時收到推送消息播放語音提示的聲音,由於AVAudioPlayer控制的音量是在系統音量的級別上來進行調整,沒法調節系統音量,若是要調節系統音量,須要再單獨處理,而且注意播放音頻文件後將系統音量恢復成原來大小。具體參考:iOS編程修改系統音量

    4.UIView截屏

     相關代碼以下所示:

    5.參考

     Core Animation Programming Guide--Core Animation Basics

     CALayer Animation - Replicator Animation

     MP3 playing using AVAudioPlayer not working on device

     iOS開發-音頻播放

相關文章
相關標籤/搜索