iOS開發月報#9|201903

這裏記錄過去一個月,我看到的值得分享的內容,包含但不限於iOS知識,每個月的最後一天發佈。 歡迎推薦內容,可以前往zhangferry/iOSMonthlyReport提交issue。

Tips

Spine + SpriteKit

項目中需要引入一些實物動畫,每個動畫之間有不同形態的切換,考慮過gif, mp4, AE + lottie, Spine + SpriteKit。

最後確定使用Spine做動畫效果,用SpriteKit處理動畫。Spin並沒有官方支持SpirteKit的庫,但有一個做的比較好的第三方庫maxgribov/Spine,支持Swift4.1。

該庫支持Bones, Slots, Skins等常用的動畫要素,通過Spine導出的json文件和動畫素材做出各種動畫效果,是僅有的近期還在維護的支持SpriteKit的Spine運行時庫。但它也存在一個問題,還不支持Mesh Animation(網格動畫)。如果所需的動畫效果不需要網格的話,非常推薦使用這個庫。

而我們所需的動畫效果又必須用到網格動畫,思考再三考慮決定放棄使用這個庫,使用SKTextureAtlas(紋理集) + 逐幀動畫來實現特殊的動畫效果。雖然輸出的還是png序列,但是SpriteKit對紋理集有足夠的優化,Xcode會在打包時把.atlas文件夾中的所有圖片做成一張合圖,然後生成一個plist文件描述每個小圖片的位置信息,所以包的大小和渲染成本都會大大降低。

快速創建轉場樣式

說到自定義轉場我們可能會直接想到UIViewControllerAnimatedTransitioning,結合這個類我們可以實現多種多樣的訂閱樣式。但是使用這種方式做轉場,我們需要引入很多代碼。有一種簡單的實現轉場的方式是通過CATransition

An object that provides an animated transition between a layer's states.

通過文檔的介紹我們知道,這個類就是用來做轉場的,只不過支持的樣式有限,但如果正好滿足你需要的話,推薦使用這種方式來實現轉場。

我們來實現一個present的漸變效果:

//創建transition對象
let transition = CATransition()
transition.duration = 0.5
//動畫樣式
//type: .fade, .moveIn, .push, .reveal
transition.type = .fade
//動畫出現方位
//subtype: .fromRight, .fromLeft, .fromTop, .fromBottem
//transition.subtype = .fromRight
transition.timingFunction = CAMediaTimingFunction(name: .easeIn)

self.view.window?.layer.add(transition, forKey: "present")
self.present(targetVc, animated: false, completion: completion)
複製代碼

如果是做push的漸變,我們只需要改變最後的控制動畫的代碼:

//父容器爲UINavigationController
self.view.layer.add(transition, forKey: "push")
self.present(targetVc, animated: false, completion: completion)

//父容器爲UITabbarController
self.tabBarController?.view.layer.add(transition, forKey: "push")
self.present(targetVc, animated: false, completion: completion)
複製代碼

什麼是UserAgent

User-Agent 首部包含了一個特徵字符串,用來讓網絡協議的對端來識別發起請求的用戶代理軟件的應用類型、操作系統、軟件開發商以及版本號,然後前端的展示就可以根據這些信息進行鍼對性的優化。

我們打開Chrome瀏覽器,生成一個請求,然後用Charles抓包,可以看到對應的User-Agent

user-agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.28 Safari/537.36
複製代碼

通過UA我們可以得到以下信息:

信息項 內容
瀏覽器名稱 Chrome
瀏覽器版本號 70.4.3729.28
渲染引擎 WebKit 537.36
操作系統 Mac OS 10.13.6

Apple Configurator 2 出現 Unauthorized Error

註銷賬號,再次登錄

Command PhaseScriptExecution failed with a nonzero exit code

運行一個項目時遇到了這個bug提示,一直編譯不過去,這其實是一個Xcode10引起的bug。 解決方案: 在Xcode菜單欄選擇File -> Workspace Setting -> Build System 選擇Legacy Build System 重新運行即可。 參考:踩坑Xcode 10之New Build System

斐波那契函數

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖爲例子而引入,故又稱爲“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……

這個是我們公司技術面試的必問題目,也是篩掉人數最多的一個問題。有一部分同學會使用數組嘗試解決這個問題,但這會把問題複雜度升級,還有些可能根本沒有思路。但其實這個問題不復雜的,用到遞歸可以很快的解決。斐波那契函數的數學表達是:

F(1)=1
F(2)=1
F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
複製代碼

用Swift實現就是:

func fibonacci(n: Int) -> Int {
    if n == 1 || n == 2 {
        return 1
    } else {
        return fibonacci(n: n - 1) + fibonacci(n: n - 2)
    }
}
複製代碼

推薦閱讀

SpriteKit Tutorial for Beginners

raywenderlich上介紹SpriteKit入門的一篇教程,通過這篇文章你可以實現一個忍者擊殺怪物的小遊戲,理解SpriteKit框架裏常用的幾種遊戲元素。不得不說這個教程做的是真的棒👍

開發小知識

該文章主要整理一些小知識點,主要涉及 iOS 以及計算基礎相關知識點,某些知識點暫時只有標題,後續會持續更新。筆者最近一段時間面試過程中發現一些普遍現象,對於一些很不起眼的問題,很多開發者都只停留在知道、聽說過的層面,但是一旦問 是什麼 和 爲什麼 ,很多應試者回答的並不理想。 大家可以對着這篇文章查找自己的知識盲區。

Swift 5 終於來了,快來看看有什麼更新!!

Xcode10.2 已經發布,是時候開始使用 Swift5 了,可以提前看下老司機週報總結的Swift5 更新內容,對適配工作做好準備。

蘋果開了一場沒有任何硬件的發佈會

3 月 26 日凌晨 1 點,蘋果在 Apple Park 新總部的喬布斯劇院召開了春季特別活動。

在活動現場,蘋果發佈了:

  • 新聞服務 Apple News+
  • 可以返現的 Apple Card
  • 遊戲服務 Apple Arcade
  • 全新的 Apple TV App 服務
  • Apple TV+ 原創視頻服務

全部是軟件和服務,沒有新硬件的出現——這或許意味着,蘋果正在尋找下一個十年的生長空間。

音視頻

辭職環遊中國的程序員小 K

大概每個人都有過這種衝動,辭掉工作出去旅行,想去哪就去哪,再也不用趕需求修 bug 通宵加班。不過對大多數人來說,也就止步於“想想”,並不會付諸行動。但是我身邊有一位朋友,真的做到了這件事:辭職一年環遊中國!

這是最近幾期ggtalk對我觸動最大的一期,同樣是做iOS開發的,爲什麼人家那麼優秀🙃

Github

996.ICU

工作996,生病ICU。這段時間的“明星項目”,旨在反抗國內互聯網公司形成的每週工作6天,每天工作早9點到晚9點的不良加班風氣。截止到3月30號,僅四天時間star已經超11萬。

XVim2

XVim2是一個用於Xcode的Vim插件。如果你是一個Vim黨,你可以直接在Xcode代碼編輯界面使用Vim的各種特性。我是最近開始接觸,也在慢慢適應Vim的遠離鼠標工作模式。另附送一個安裝流程:

1、關閉Xcode 2、鑰匙串->證書助理->證書創建 名稱:XcodeSigner 身份類型:自簽名根證書 證書類型:代碼簽名 3、重新簽署Xcode

#需要等待一段時間
sudo codesign -f -s XcodeSigner /Applications/Xcode.app 
複製代碼

4、按照官方步驟安裝XVim2

文摘

培養出在沒人監督自己的時候也能高效工作的自我責任感非常重要。你也可以拔這稱爲是具有一種性格或者具有一種素質,它們都是同一個概念。如果缺乏對自己的責任感,你將永遠依賴外部動機來驅使你努力工作。你容易折服於一根胡蘿蔔的誘惑,也容易屈從於一根大棒的威脅。

---《軟技能:代碼之外的生存指南》

最終,它成爲我自己的知識體系中嚴重的短板。沒有花時間去徹底掌握Lambda表達式的工作原理,結果浪費了大把的時間。最後當我下決心花時間去了解Lambda表達式的時候,我只花了幾個小時閱讀並實踐,就領會了這一概念。

---《軟技能:代碼之外的生存指南》

回到從前,在我們剛開始一起生活的時候,我們就決定將我們收入的10%用於風險什一稅--實際上我們把這部分收入捐給一家慈善機構,以幫助印度的孤兒。在我們第一次奉獻什一稅的第二週,我的妻子就得到了加薪,加薪的數額正好是我們當時奉獻什一稅的數額。我個人認爲,我們的成功很大一部分就是因爲這種對奉獻的承諾,一直恪守到今天。 即使你不信仰任何宗教,我認爲這一點也有某種符合邏輯的解釋。我認爲,你把錢看的越重,你就越難以在理財方面做出明智的、成功的投資選擇。自願把自己收入的固定數額奉獻或者捐贈給慈善機構,可以改變你對金錢的看法。這一思想上的轉變讓你從金錢的所有者變成管理者。

--《軟技能:代碼之外的生存指南》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章