畫:UIView.animate 與 CABasicAnimation 從入門到進(jìn)階)
掌握 UIKit-cross-platform 動(dòng)畫UIView.animate 與 CABasicAnimation 從入門到進(jìn)階【免費(fèi)下載鏈接】UIKit-cross-platformCross-platform Swift implementation of UIKit, mostly for Android項(xiàng)目地址: https://gitcode.com/gh_mirrors/ui/UIKit-cross-platformUIKit-cross-platform 是一個(gè)用 Swift 編寫的跨平臺(tái) UIKit 實(shí)現(xiàn)主要面向 Android 平臺(tái)讓你用熟悉的 iOS API 寫出原生體驗(yàn)的界面。而動(dòng)畫正是讓 App 界面活起來的關(guān)鍵。本文聚焦 UIKit-cross-platform 動(dòng)畫的兩大核心 API——UIView.animate與CABasicAnimation從零基礎(chǔ)入門到進(jìn)階實(shí)戰(zhàn)幫你快速掌握跨平臺(tái)動(dòng)畫開發(fā)的核心技能。為什么動(dòng)畫是 UIKit-cross-platform 開發(fā)的重頭戲在移動(dòng)應(yīng)用中動(dòng)畫不只是好看。一個(gè)自然的過渡反饋能顯著提升操作手感與用戶體驗(yàn)。UIKit-cross-platform 的目標(biāo)是讓同一套 Swift 動(dòng)畫代碼在 Android 上也能流暢運(yùn)行動(dòng)畫引擎由內(nèi)部的Timer驅(qū)動(dòng)逐幀更新你可以直接復(fù)用 iOS 的編程心智無需學(xué)習(xí)第二套 API。在動(dòng)手寫代碼之前建議先通讀項(xiàng)目文檔快速建立整體認(rèn)知docs/ARCHITECTURE.md 和 docs/FEATURE_COVERAGE.md。入門第一步UIView.animate 快速上手對(duì)于新手UIView.animate是最友好的動(dòng)畫入口。它由 Sources/UIViewanimate.swift 提供采用聲明式寫法在動(dòng)畫閉包里修改視圖屬性框架自動(dòng)完成中間幀的插值。最簡(jiǎn)動(dòng)畫寫法UIView.animate(withDuration: 0.5) { view.alpha 0.0 // 淡出 view.center newCenter // 移動(dòng) }只需一兩行代碼淡入淡出、位移動(dòng)畫就完成了。這也是日常開發(fā)中頻率最高的動(dòng)畫方式。常用參數(shù)一覽UIView.animate支持五個(gè)核心參數(shù)withDuration時(shí)長(zhǎng)、delay延遲、options動(dòng)畫選項(xiàng)、animations動(dòng)畫閉包和completion完成回調(diào)UIView.animate( withDuration: 0.5, delay: 0.2, options: [.curveEaseInOut, .allowUserInteraction], animations: { view.alpha 1.0 }, completion: { finished in print(動(dòng)畫結(jié)束finished \(finished)) } )動(dòng)畫選項(xiàng) AnimationOptions 怎么選在UIView.animate中緩動(dòng)曲線通過options傳入常用選項(xiàng)有curveEaseIn先慢后快適合進(jìn)入場(chǎng)景curveEaseOut先快后慢適合退出場(chǎng)景最常用curveEaseInOut兩端緩動(dòng)適合居中過渡curveLinear勻速適合機(jī)械運(yùn)動(dòng)allowUserInteraction動(dòng)畫期間允許用戶交互進(jìn)階一CABasicAnimation 精確控制每一幀當(dāng)UIView.animate滿足不了精細(xì)需求時(shí)就該請(qǐng)出CABasicAnimation了。它直接作用于CALayer讓你精確指定動(dòng)畫的起始值、結(jié)束值、時(shí)長(zhǎng)與填充模式。給圖層添加一個(gè)位置動(dòng)畫let animation CABasicAnimation(keyPath: .position) animation.fromValue layer.position animation.toValue newPosition animation.duration 1.0 layer.add(animation, forKey: positionAnimation)add(_:forKey:)方法來自 Sources/CALayeranimations.swift如果未設(shè)置fromValue框架會(huì)自動(dòng)取當(dāng)前可見狀態(tài)作為起點(diǎn)。支持動(dòng)畫的屬性清單AnimationKeyPath枚舉定義了當(dāng)前可動(dòng)畫的屬性見 Sources/AnimationKeyPath.swiftposition位置backgroundColor背景色支持顏色插值opacity透明度bounds尺寸transform3D 變換anchorPoint錨點(diǎn)關(guān)鍵屬性fillMode 與 isRemovedOnCompletionfillMode kCAFillModeForwards動(dòng)畫結(jié)束后保持終點(diǎn)狀態(tài)isRemovedOnCompletion false動(dòng)畫完成后不自動(dòng)移除這兩個(gè)屬性配合使用是解決動(dòng)畫結(jié)束后回彈問題的標(biāo)準(zhǔn)方案。進(jìn)階二彈簧動(dòng)畫與緩動(dòng)曲線調(diào)校UIKit-cross-platform 同樣支持 iOS 上廣受好評(píng)的彈簧動(dòng)畫方法簽名與 iOS 完全一致UIView.animate( withDuration: 0.6, delay: 0, usingSpringWithDamping: 0.6, // 阻尼系數(shù)越小彈得越歡 initialSpringVelocity: 0.5, // 初始速度 animations: { card.transform targetTransform } )damping阻尼控制回彈幅度initialSpringVelocity初始速度控制起手快慢調(diào)好這兩個(gè)參數(shù)按鈕、卡片、彈窗都能擁有靈動(dòng)的原生感。底層實(shí)現(xiàn)參考 Sources/CASpringAnimation.swift。另外CAMediaTimingFunction見 Sources/CAMediaTimingFunction.swift內(nèi)置了linear、easeIn、easeOut、easeInEaseOut等多條緩動(dòng)曲線且都有對(duì)應(yīng)的數(shù)學(xué)實(shí)現(xiàn)你可以直接設(shè)置到CABasicAnimation.timingFunction上獲得更細(xì)膩的節(jié)奏控制。進(jìn)階三動(dòng)畫組合、回調(diào)與實(shí)戰(zhàn)避坑多個(gè)屬性同時(shí)動(dòng)畫在同一個(gè)UIView.animate閉包里修改多個(gè)屬性它們會(huì)自動(dòng)共享同一時(shí)間軸與緩動(dòng)曲線完成后統(tǒng)一觸發(fā)一次completion??蚣芡ㄟ^UIViewAnimationGroup管理動(dòng)畫組只有組內(nèi)所有動(dòng)畫都結(jié)束回調(diào)才會(huì)執(zhí)行見 Sources/UIViewAnimationGroup.swift。如何中途停止動(dòng)畫layer.removeAnimation(forKey: positionAnimation) layer.removeAllAnimations()removeAllAnimations()適合在視圖復(fù)用時(shí)快速清理避免舊動(dòng)畫干擾新動(dòng)畫。三個(gè)常見坑與對(duì)策動(dòng)畫結(jié)束回彈記得設(shè)置fillMode與isRemovedOnCompletion或直接在completion里把目標(biāo)值寫回模型層。duration 為 0 的動(dòng)畫源碼中已做特殊處理見 Sources/CABasicAnimationupdateProgress.swift此時(shí)會(huì)瞬間跳到終點(diǎn)可放心用于即時(shí)布局刷新。重復(fù)動(dòng)畫殘留每次添加動(dòng)畫前先調(diào)用removeAllAnimations()防止動(dòng)畫疊加導(dǎo)致抖動(dòng)??偨Y(jié)一條清晰的進(jìn)階路線掌握 UIKit-cross-platform 動(dòng)畫本質(zhì)上就是掌握三條主線入門用UIView.animate完成 90% 的日常過渡記住duration、delay、options三個(gè)核心參數(shù)進(jìn)階用CABasicAnimation精確控制CALayer屬性理解fromValue/toValue/fillMode的配合進(jìn)階用彈簧動(dòng)畫與CAMediaTimingFunction調(diào)出高級(jí)手感再用動(dòng)畫組管理復(fù)雜場(chǎng)景。動(dòng)畫是 UI 開發(fā)的調(diào)味料劑量恰好才能出彩。建議從復(fù)制上面的最小示例開始在你的項(xiàng)目里逐個(gè)跑通再慢慢加入延遲、緩動(dòng)和組合很快你就能寫出絲滑的跨平臺(tái)交互動(dòng)畫。【免費(fèi)下載鏈接】UIKit-cross-platformCross-platform Swift implementation of UIKit, mostly for Android項(xiàng)目地址: https://gitcode.com/gh_mirrors/ui/UIKit-cross-platform創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考