国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS CAReplicatorLayer實現脈沖動畫效果

2019-10-21 18:46:06
字體:
來源:轉載
供稿:網友

iOS CAReplicatorLayer 實現脈沖動畫效果,供大家參考,具體內容如下

效果圖

iOS,CAReplicatorLayer,脈沖動畫

脈沖數量、速度、半徑、透明度、漸變顏色、方向等都可以設置。可以用于地圖標注(Annotation)、按鈕長按動畫效果(例如錄音按鈕)等。

代碼已上傳 GitHub:https://github.com/Silence-GitHub/CoreAnimationDemo

實現原理

實現方法參考:https://github.com/shu223/Pulsator

但是覺得那些代碼不夠簡潔,所以自己寫了一個,還加了些功能。

自定義 PulsatorLayer,繼承自 CAReplicatorLayer。CAReplicatorLayer 可以復制子圖層(Sublayer),被復制出來的子圖層可以改變位置、顏色等屬性。每一個脈沖(一個漸變的圓形)就是一個被復制出來的子圖層。

顯示脈沖的圖層就是子圖層,把它作為 pulseLayer 屬性

private var pulseLayer: CALayer!

脈沖子圖層一開始不顯示,因此初始化時為全透明;通過設置圓角,使 pulseLayer 為圓形

pulseLayer = CALayer()pulseLayer.opacity = 0pulseLayer.backgroundColor = outColorpulseLayer.contentsScale = UIScreen.main.scalepulseLayer.bounds.size = CGSize(width: maxRadius * 2, height: maxRadius * 2)pulseLayer.cornerRadius = maxRadiusaddSublayer(pulseLayer)

設置 CAReplicatorLayer 的一些屬性

// The number of copies to create, including the source layersinstanceCount// Specifies the delay, in seconds, between replicated copiesinstanceDelay

設置復制子圖層的數量、創建兩個子圖層之間的時間間隔。

CAReplicatorLayer 遵循 CAMediaTiming 協議,設置協議屬性

// Determines the number of times the animation will repeatrepeatCount = MAXFLOAT

把動畫重復次數設置為很大的數,讓動畫一直重復。

動畫效果由 3 個 CABasicAnimation 組成,分別改變脈沖的大小、透明度、背景色顏色

let scaleAnimation = CABasicAnimation(keyPath: "transform.scale.xy")scaleAnimation.duration = animationDurationlet opacityAnimation = CABasicAnimation(keyPath: "opacity")opacityAnimation.duration = animationDurationlet colorAnimation = CABasicAnimation(keyPath: "backgroundColor")colorAnimation.duration = animationDurationswitch pulseOrientation {case .out:  scaleAnimation.fromValue = minRadius / maxRadius  scaleAnimation.toValue = 1    opacityAnimation.fromValue = maxAlpha  opacityAnimation.toValue = minAlpha    colorAnimation.fromValue = inColor  colorAnimation.toValue = outColor  case .in:  scaleAnimation.fromValue = 1  scaleAnimation.toValue = minRadius / maxRadius    opacityAnimation.fromValue = minAlpha  opacityAnimation.toValue = maxAlpha    colorAnimation.fromValue = outColor  colorAnimation.toValue = inColor}let animationGroup = CAAnimationGroup()animationGroup.duration = animationDuration + animationIntervalanimationGroup.animations = [scaleAnimation, opacityAnimation, colorAnimation]animationGroup.repeatCount = repeatCountpulseLayer.add(animationGroup, forKey: kPulseAnimationKey)

以上代碼判斷了脈沖的方向(由內向外、由外向內),兩種方向的動畫屬性起止取值相反。把這 3 個 CABasicAnimation 加入 CAAnimationGroup 中一起執行。

以上就是實現原理與最核心的代碼,具體見 GitHub:https://github.com/Silence-GitHub/CoreAnimationDemo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柯坪县| 泸西县| 荆州市| 喀什市| 安吉县| 赣榆县| 临沂市| 山东| 武功县| 尚志市| 南澳县| 安泽县| 浙江省| 定南县| 临城县| 尉犁县| 霍山县| 广东省| 南丰县| 绿春县| 固阳县| 当阳市| 嵩明县| 望奎县| 扶沟县| 康定县| 阿图什市| 鱼台县| 都安| 庆云县| 公安县| 德格县| 吉木乃县| 丰都县| 大悟县| 翼城县| 永康市| 大竹县| 军事| 磴口县| 上杭县|