###iOS核心動畫詳解swift版----高級動畫 接上篇文章,此次總結iOS核心動畫的高級動畫git
func rectangle(){ // 聲明動畫 let ani:CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "position") // 動畫持續時間 ani.duration = 3.0 // 代理 ani.delegate = self // 設置不復原 ani.removedOnCompletion = false ani.fillMode = kCAFillModeForwards // 設置路徑 let value1 = NSValue.init(CGPoint: CGPointMake(80, 380)) let value2 = NSValue.init(CGPoint: CGPointMake(300, 380)) let value3 = NSValue.init(CGPoint: CGPointMake(300, 600)) let value4 = NSValue.init(CGPoint: CGPointMake(80, 600)) let value5 = NSValue.init(CGPoint: CGPointMake(80, 380)) ani.values = [value1, value2,value3, value4, value5] // 開啓動畫 self.testView.layer.addAnimation(ani, forKey: nil) }
####2.圓形運動 代碼以下:github
func circular(){ let ani:CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "position") ani.duration = 3.0 ani.delegate = self ani.removedOnCompletion = false ani.fillMode = kCAFillModeForwards let path:CGMutablePathRef = CGPathCreateMutable() CGPathAddEllipseInRect(path, nil, CGRectMake(30, 300, 300, 300)) ani.path = path self.testView.layer.addAnimation(ani, forKey: nil) }
####3.漸變更畫 代碼以下:spring
func gradual(){ let ani:CATransition = CATransition() // kCATransitionFade 漸變 // kCATransitionMoveIn 覆蓋 // kCATransitionPush 推出 // kCATransitionReveal 揭開 //ani.type = kCATransitionPush ani.type = "rippleEffect" // kCATransitionFromRight 從右邊 // kCATransitionFromLeft 從左邊 // kCATransitionFromTop 從頂部 // kCATransitionFromBottom 從底部 ani.subtype = kCATransitionFromLeft ani.duration = 3.0 ani.delegate = self ani.fillMode = kCAFillModeForwards ani.removedOnCompletion = false self.testView.image = UIImage(named: "12") self.testView.layer.addAnimation(ani, forKey: nil) }
####4.轉場動畫 代碼以下:swift
func transition(){ let ani:CATransition = CATransition() // rippleEffect // cube // pageCurl ani.type = "suckEffect" ani.subtype = kCATransitionFromLeft ani.duration = 2.0 ani.delegate = self ani.fillMode = kCAFillModeForwards ani.removedOnCompletion = false self.testView.image = UIImage(named: "12") self.testView.layer.addAnimation(ani, forKey: nil) }
####5.彈簧動畫 代碼以下:動畫
func spring(){ let ani:CASpringAnimation = CASpringAnimation(keyPath: "bounds") // 彈簧質量,影響慣性 ani.mass = 10 // 剛度係數,數值越大,產生形變的力越大,運動越快 ani.stiffness = 5000 // 阻尼係數,越大中止越快 ani.damping = 100 // 初始速度 ani.initialVelocity = 5 ani.delegate = self ani.toValue = NSValue.init(CGRect: CGRectMake(0, 0, 400, 400)) ani.duration = ani.settlingDuration ani.removedOnCompletion = false ani.fillMode = kCAFillModeForwards self.testView.layer.addAnimation(ani, forKey: nil) }
####6.組合動畫 代碼以下:url
func groups(){ // 位置 let ani = CABasicAnimation(keyPath: "transform.rotation.z") ani.toValue = NSNumber.init(double: M_PI) // 彈簧 let sprAni:CASpringAnimation = CASpringAnimation(keyPath: "bounds") // 彈簧質量,影響慣性 sprAni.mass = 10 // 剛度係數,數值越大,產生形變的力越大,運動越快 sprAni.stiffness = 5000 // 阻尼係數,越大中止越快 sprAni.damping = 100 // 初始速度 sprAni.initialVelocity = 10 sprAni.duration = sprAni.settlingDuration sprAni.toValue = NSValue.init(CGRect: CGRectMake(0, 0, 400, 400)) // 組合動畫 let group:CAAnimationGroup = CAAnimationGroup() group.animations = [ani, sprAni] group.duration = 0.5 group.removedOnCompletion = false group.fillMode = kCAFillModeForwards group.delegate = self self.testView.layer.addAnimation(group, forKey: nil) }