iOS開發月報#9|201903

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

Tips

Spine + SpriteKit

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

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

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

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

快速建立轉場樣式

說到自定義轉場咱們可能會直接想到UIViewControllerAnimatedTransitioning,結合這個類咱們能夠實現多種多樣的訂閱樣式。可是使用這種方式作轉場,咱們須要引入不少代碼。有一種簡單的實現轉場的方式是經過CATransitionjson

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

經過文檔的介紹咱們知道,這個類就是用來作轉場的,只不過支持的樣式有限,但若是正好知足你須要的話,推薦使用這種方式來實現轉場。數組

咱們來實現一個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的漸變,咱們只須要改變最後的控制動畫的代碼:bash

//父容器爲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三、2一、3四、……

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

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的遠離鼠標工做模式。另附送一個安裝流程:

一、關閉Xcode 二、鑰匙串->證書助理->證書建立 名稱:XcodeSigner 身份類型:自簽名根證書 證書類型:代碼簽名 三、從新簽署Xcode

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

四、按照官方步驟安裝XVim2

文摘

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

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

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

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

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

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

相關文章
相關標籤/搜索