這里記錄過去一個月,我看到的值得分享的內容,包含但不限于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%用于風險什一稅--實際上我們把這部分收入捐給一家慈善機構,以幫助印度的孤兒。在我們第一次奉獻什一稅的第二周,我的妻子就得到了加薪,加薪的數額正好是我們當時奉獻什一稅的數額。我個人認為,我們的成功很大一部分就是因為這種對奉獻的承諾,一直恪守到今天。
即使你不信仰任何宗教,我認為這一點也有某種符合邏輯的解釋。我認為,你把錢看的越重,你就越難以在理財方面做出明智的、成功的投資選擇。自愿把自己收入的固定數額奉獻或者捐贈給慈善機構,可以改變你對金錢的看法。這一思想上的轉變讓你從金錢的所有者變成管理者。
--《軟技能:代碼之外的生存指南》