Twitter iOS App 啟動動畫的實現
當我第一次開啟 twitter 的時候,就被它的啟動動畫驚豔到了。然而分析一下這個動畫其實也不難實現,於是趕緊做一個出來看看。
整個動畫效果能夠拆分為以下幾步:
- 佈置一個與 LaunchScreen 相同的介面
- 讓檢視中間的 Logo 先縮小後放大直至蓋滿整個螢幕
- Logo 在放大過程中逐漸變透明
- Initial View Controller 的內容稍微放大後恢復原狀
拆分完之後就好辦咯,一步步來實現吧~
先布個介面吧
由於後面需要讓 logo 變透明,我們選擇用 mask 來實現。
let logoLayer = CALayer() logoLayer.bounds = CGRect(x: 0, y: 0, width: 100, height: 100) logoLayer.position = view.center logoLayer.contents = UIImage(named: "logo")?.cgImage view.layer.mask = logoLayer
好了,小鳥出來了。
但一開始這個 logo 並不是透明的,於是先在其上蓋一層白色的 view,並改一下背景顏色吧。
let shelterView = UIView(frame: view.frame) shelterView.backgroundColor = .white view.addSubview(shelterView) window!.backgroundColor = UIColor(red: 29 / 255.0, green: 161 / 255.0, blue: 242 / 255.0, alpha: 1)
棒,第一步完成。
那接著做 Logo 的縮小放大吧
這裡我們用 CAKeyframeAnimation,讓這個縮放動作一氣呵成。設定好開始時間、持續時間和各個關鍵幀,最後讓它保持動畫最後的狀態。
let logoAnimation = CAKeyframeAnimation(keyPath: "bounds") logoAnimation.beginTime = CACurrentMediaTime() + 1 logoAnimation.duration = 1 logoAnimation.keyTimes = [0, 0.4, 1] logoAnimation.values = [NSValue(cgRect: CGRect(x: 0, y: 0, width: 100, height: 100)), NSValue(cgRect: CGRect(x: 0, y: 0, width: 85, height: 85)), NSValue(cgRect: CGRect(x: 0, y: 0, width: 4500, height: 4500))] logoAnimation.timingFunctions = [CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut), CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)] logoAnimation.isRemovedOnCompletion = false logoAnimation.fillMode = kCAFillModeForwards logoLayer.add(logoAnimation, forKey: "zoomAnimation")
又好了。
順道把 Logo 透明也帶上
這個算好漸變透明的時間就好。
UIView.animate(withDuration: 0.3, delay: 1.4, options: .curveLinear, animations: { shelterView.alpha = 0 }) { (_) in shelterView.removeFromSuperview() view.layer.mask = nil }
最後,讓初始介面顛一下
道理跟第二步相同,就不說了~
let mainViewAnimation = CAKeyframeAnimation(keyPath: "transform") mainViewAnimation.beginTime = CACurrentMediaTime() + 1.1 mainViewAnimation.duration = 0.6 mainViewAnimation.keyTimes = [0, 0.5, 1] mainViewAnimation.values = [NSValue(caTransform3D: CATransform3DIdentity), NSValue(caTransform3D: CATransform3DScale(CATransform3DIdentity, 1.1, 1.1, 1)), NSValue(caTransform3D: CATransform3DIdentity)] view.layer.add(mainViewAnimation, forKey: "transformAnimation") view.layer.transform = CATransform3DIdentity
Done.
需要完整程式碼的可以來這裡下~
相關文章
- iOS動畫系列之七:實現類似Twitter的啟動動畫iOS動畫
- 如何實現 iOS App 的冷啟動優化iOSAPP優化
- iOS APP啟動廣告實現方式 與 APP喚端呼叫iOSAPP
- iOS實現字串動畫iOS字串動畫
- iOS (仿印物App)TableView給力動畫的簡單實現iOSAPPView動畫
- iOS App 的完整啟動過程iOSAPP
- 解析 iOS 動畫原理與實現iOS動畫
- App啟動廣告頁的實現和封裝APP封裝
- iOS App冷啟動治理:來自美團外賣的實踐iOSAPP
- iOS_三種簡單動畫的實現iOS動畫
- 使用Webview實現app啟動引導頁WebViewAPP
- 深入理解 iOS App 的啟動過程iOSAPP
- iOS開發 APP啟動過程iOSAPP
- iOS App從點選到啟動iOSAPP
- iOS APP啟動頁載入廣告iOSAPP
- iOS Dynamic Framework 對 App 啟動時間影響實測iOSFrameworkAPP
- Android View篇之啟動頁倒數計時動畫的實現AndroidView動畫
- css3實現顫動的動畫CSSS3動畫
- iOS-APP的啟動流程和生命週期iOSAPP
- HTML5啟動手機中的APP(IOS)HTMLAPPiOS
- 如何精確度量 iOS App 的啟動時間iOSAPP
- iOS動畫實戰之Lottie動畫iOS動畫
- 高德APP啟動耗時剖析與優化實踐(iOS篇)APP優化iOS
- iOS實現超酷頁面切換動畫特效iOS動畫特效
- UIScrollView和UIPageControl實現app啟動滑動圖UIViewAPP
- iOS APP啟動-Main函式之前的那些事兒iOSAPPAI函式
- SVG實現動態模糊動畫效果SVG動畫
- SVG 實現動態模糊動畫效果SVG動畫
- iOS App Icon和啟動圖尺寸配置iOSAPP
- 萬彩動畫大師教程 | 如何實現物件的閃動的動畫效果動畫物件
- 仿掌閱實現書籍開啟動畫動畫
- iOS UITableView 拖動排序的實現iOSUIView排序
- [iOS]5 分鐘實現抖音 APPiOSAPP
- Ios+appium自動化多裝置執行實現iOSAPP
- IOS基礎-APP圖示、啟動頁、名字的設定iOSAPP
- RecyclerView 之使用 ItemTouchHelper 實現互動動畫View動畫
- svg實現矩形水平運動動畫效果SVG動畫
- iOS純Autolayout實現微信朋友圈和通訊錄另附App啟動頁短視訊效果iOSAPP