這里記錄過去一個月,我看到的值得分享的內(nèi)容,包含但不限于iOS知識,每個月的最后一天發(fā)布。
歡迎推薦內(nèi)容,可以前往zhangferry/iOSMonthlyReport提交issue。
Tips
Spine + SpriteKit
項目中需要引入一些實物動畫,每個動畫之間有不同形態(tài)的切換,考慮過gif, mp4, AE + lottie, Spine + SpriteKit。
最后確定使用Spine做動畫效果,用SpriteKit處理動畫。Spin并沒有官方支持SpirteKit的庫,但有一個做的比較好的第三方庫maxgribov/Spine,支持Swift4.1。
該庫支持Bones, Slots, Skins等常用的動畫要素,通過Spine導(dǎo)出的json文件和動畫素材做出各種動畫效果,是僅有的近期還在維護(hù)的支持SpriteKit的Spine運行時庫。但它也存在一個問題,還不支持Mesh Animation(網(wǎng)格動畫)。如果所需的動畫效果不需要網(wǎng)格的話,非常推薦使用這個庫。
而我們所需的動畫效果又必須用到網(wǎng)格動畫,思考再三考慮決定放棄使用這個庫,使用SKTextureAtlas(紋理集) + 逐幀動畫來實現(xiàn)特殊的動畫效果。雖然輸出的還是png序列,但是SpriteKit對紋理集有足夠的優(yōu)化,Xcode會在打包時把.atlas文件夾中的所有圖片做成一張合圖,然后生成一個plist文件描述每個小圖片的位置信息,所以包的大小和渲染成本都會大大降低。
快速創(chuàng)建轉(zhuǎn)場樣式
說到自定義轉(zhuǎn)場我們可能會直接想到UIViewControllerAnimatedTransitioning,結(jié)合這個類我們可以實現(xiàn)多種多樣的訂閱樣式。但是使用這種方式做轉(zhuǎn)場,我們需要引入很多代碼。有一種簡單的實現(xiàn)轉(zhuǎn)場的方式是通過CATransition
An object that provides an animated transition between a layer's states.
通過文檔的介紹我們知道,這個類就是用來做轉(zhuǎn)場的,只不過支持的樣式有限,但如果正好滿足你需要的話,推薦使用這種方式來實現(xiàn)轉(zhuǎn)場。
我們來實現(xiàn)一個present的漸變效果:
//創(chuàng)建transition對象
let transition = CATransition()
transition.duration = 0.5
//動畫樣式
//type: .fade, .moveIn, .push, .reveal
transition.type = .fade
//動畫出現(xiàn)方位
//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 首部包含了一個特征字符串,用來讓網(wǎng)絡(luò)協(xié)議的對端來識別發(fā)起請求的用戶代理軟件的應(yīng)用類型、操作系統(tǒng)、軟件開發(fā)商以及版本號,然后前端的展示就可以根據(jù)這些信息進(jìn)行針對性的優(yōu)化。
我們打開Chrome瀏覽器,生成一個請求,然后用Charles抓包,可以看到對應(yīng)的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我們可以得到以下信息:
| 信息項 | 內(nèi)容 |
|---|---|
| 瀏覽器名稱 | Chrome |
| 瀏覽器版本號 | 70.4.3729.28 |
| 渲染引擎 | WebKit 537.36 |
| 操作系統(tǒng) | Mac OS 10.13.6 |
Apple Configurator 2 出現(xiàn) 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
斐波那契函數(shù)
斐波那契數(shù)列(Fibonacci sequence),又稱黃金分割數(shù)列、因數(shù)學(xué)家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數(shù)列”,指的是這樣一個數(shù)列:1、1、2、3、5、8、13、21、34、……
這個是我們公司技術(shù)面試的必問題目,也是篩掉人數(shù)最多的一個問題。有一部分同學(xué)會使用數(shù)組嘗試解決這個問題,但這會把問題復(fù)雜度升級,還有些可能根本沒有思路。但其實這個問題不復(fù)雜的,用到遞歸可以很快的解決。斐波那契函數(shù)的數(shù)學(xué)表達(dá)是:
F(1)=1
F(2)=1
F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
用Swift實現(xiàn)就是:
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入門的一篇教程,通過這篇文章你可以實現(xiàn)一個忍者擊殺怪物的小游戲,理解SpriteKit框架里常用的幾種游戲元素。不得不說這個教程做的是真的棒??
開發(fā)小知識
該文章主要整理一些小知識點,主要涉及 iOS 以及計算基礎(chǔ)相關(guān)知識點,某些知識點暫時只有標(biāo)題,后續(xù)會持續(xù)更新。筆者最近一段時間面試過程中發(fā)現(xiàn)一些普遍現(xiàn)象,對于一些很不起眼的問題,很多開發(fā)者都只停留在知道、聽說過的層面,但是一旦問 是什么 和 為什么 ,很多應(yīng)試者回答的并不理想。
大家可以對著這篇文章查找自己的知識盲區(qū)。
Swift 5 終于來了,快來看看有什么更新!!
Xcode10.2 已經(jīng)發(fā)布,是時候開始使用 Swift5 了,可以提前看下老司機(jī)周報總結(jié)的Swift5 更新內(nèi)容,對適配工作做好準(zhǔn)備。
蘋果開了一場沒有任何硬件的發(fā)布會
3 月 26 日凌晨 1 點,蘋果在 Apple Park 新總部的喬布斯劇院召開了春季特別活動。
在活動現(xiàn)場,蘋果發(fā)布了:
- 新聞服務(wù) Apple News+
- 可以返現(xiàn)的 Apple Card
- 游戲服務(wù) Apple Arcade
- 全新的 Apple TV App 服務(wù)
- Apple TV+ 原創(chuàng)視頻服務(wù)
全部是軟件和服務(wù),沒有新硬件的出現(xiàn)——這或許意味著,蘋果正在尋找下一個十年的生長空間。
音視頻
辭職環(huán)游中國的程序員小 K
大概每個人都有過這種沖動,辭掉工作出去旅行,想去哪就去哪,再也不用趕需求修 bug 通宵加班。不過對大多數(shù)人來說,也就止步于“想想”,并不會付諸行動。但是我身邊有一位朋友,真的做到了這件事:辭職一年環(huán)游中國!
這是最近幾期ggtalk對我觸動最大的一期,同樣是做iOS開發(fā)的,為什么人家那么優(yōu)秀??
Github
996.ICU
工作996,生病ICU。這段時間的“明星項目”,旨在反抗國內(nèi)互聯(lián)網(wǎng)公司形成的每周工作6天,每天工作早9點到晚9點的不良加班風(fēng)氣。截止到3月30號,僅四天時間star已經(jīng)超11萬。
XVim2
XVim2是一個用于Xcode的Vim插件。如果你是一個Vim黨,你可以直接在Xcode代碼編輯界面使用Vim的各種特性。我是最近開始接觸,也在慢慢適應(yīng)Vim的遠(yuǎn)離鼠標(biāo)工作模式。另附送一個安裝流程:
1、關(guān)閉Xcode
2、鑰匙串->證書助理->證書創(chuàng)建
名稱:XcodeSigner
身份類型:自簽名根證書
證書類型:代碼簽名
3、重新簽署Xcode
#需要等待一段時間
sudo codesign -f -s XcodeSigner /Applications/Xcode.app
4、按照官方步驟安裝XVim2
文摘
培養(yǎng)出在沒人監(jiān)督自己的時候也能高效工作的自我責(zé)任感非常重要。你也可以拔這稱為是具有一種性格或者具有一種素質(zhì),它們都是同一個概念。如果缺乏對自己的責(zé)任感,你將永遠(yuǎn)依賴外部動機(jī)來驅(qū)使你努力工作。你容易折服于一根胡蘿卜的誘惑,也容易屈從于一根大棒的威脅。
---《軟技能:代碼之外的生存指南》
最終,它成為我自己的知識體系中嚴(yán)重的短板。沒有花時間去徹底掌握Lambda表達(dá)式的工作原理,結(jié)果浪費了大把的時間。最后當(dāng)我下決心花時間去了解Lambda表達(dá)式的時候,我只花了幾個小時閱讀并實踐,就領(lǐng)會了這一概念。
---《軟技能:代碼之外的生存指南》
回到從前,在我們剛開始一起生活的時候,我們就決定將我們收入的10%用于風(fēng)險什一稅--實際上我們把這部分收入捐給一家慈善機(jī)構(gòu),以幫助印度的孤兒。在我們第一次奉獻(xiàn)什一稅的第二周,我的妻子就得到了加薪,加薪的數(shù)額正好是我們當(dāng)時奉獻(xiàn)什一稅的數(shù)額。我個人認(rèn)為,我們的成功很大一部分就是因為這種對奉獻(xiàn)的承諾,一直恪守到今天。
即使你不信仰任何宗教,我認(rèn)為這一點也有某種符合邏輯的解釋。我認(rèn)為,你把錢看的越重,你就越難以在理財方面做出明智的、成功的投資選擇。自愿把自己收入的固定數(shù)額奉獻(xiàn)或者捐贈給慈善機(jī)構(gòu),可以改變你對金錢的看法。這一思想上的轉(zhuǎn)變讓你從金錢的所有者變成管理者。
--《軟技能:代碼之外的生存指南》