IOS-swift 动画04 CALayer属性动画
2016-05-21 00:20
393 查看
CALayer 属性动画
新建layer 集成自CALayer 并定义属性 通过修改属性进行动画的执行
这一块比较简单就直接上代码了
DMEO效果
新建layer 集成自CALayer 并定义属性 通过修改属性进行动画的执行
这一块比较简单就直接上代码了
DMEO效果
// // DSProgressLayer.swift // AnimationStd // // Created by 鲍东升 on 16/5/20. // Copyright © 2016年 鲍东升. All rights reserved. // import UIKit class DSProgressLayer: CAShapeLayer { //MARK: - PropertyList var progress:CGFloat = 0 var i_progress:CGFloat{ set{ self.progress = newValue self.setAnimatiion(self.progress, layer: self.pointerLayer) } get{ return self.progress } } private lazy var pointerLayer:CAShapeLayer={ var val=CAShapeLayer() return val }() //MARK: - Func override init() { super.init() self.prepareLayer(self,pointerLayer: pointerLayer) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } //MARK: - CustomFunc func prepareLayer(layer:CAShapeLayer,pointerLayer:CAShapeLayer) -> CAShapeLayer { layer.bounds = CGRect(x: 0, y: 0, width: 200, height: 200) layer.path = UIBezierPath(ovalInRect: layer.bounds).CGPath layer.fillColor = UIColor.clearColor().CGColor layer.strokeColor = UIColor.orangeColor().CGColor layer.lineWidth = 4 pointerLayer.path = UIBezierPath(rect: CGRectMake(-2, -97,4, 97)).CGPath pointerLayer.fillColor = UIColor.cyanColor().CGColor pointerLayer.position = CGPoint(x: layer.bounds.size.width/2, y: layer.bounds.size.width/2) layer.addSublayer(pointerLayer) return layer } func setAnimatiion(progress:CGFloat,layer:CAShapeLayer) -> CAShapeLayer { layer.setAffineTransform(CGAffineTransformMakeRotation(progress * 2.0 * CGFloat(M_PI))) return layer } }
// // ViewController.swift // LayerAnimation // // Created by 鲍东升 on 16/5/20. // Copyright © 2016年 鲍东升. All rights reserved. // import UIKit class ViewController: UIViewController { //MARK: - PropertyList var sliderValueChangeBlock:((slider:UISlider)->())? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. prepareView(view) } func prepareView(view:UIView) -> UIView { configLayer(view,layer:DSProgressLayer(),done: { (layer:DSProgressLayer)->() in self.configSlider( UISlider(frame: CGRect(x: layer.frame.origin.x, y: 420, width: layer.frame.width, height: 20)), layer: layer,done: { (slider:UISlider)->() in view.addSubview(slider) }) } ) return view } func configLayer(view:UIView,layer:DSProgressLayer,done:((layer:DSProgressLayer)->()) ){ view.layer.addSublayer(layer) layer.frame = CGRect(x: UIScreen.mainScreen().bounds.width/2 - 100, y: 200, width: 200, height: 200) done(layer: layer) } func configSlider(slider:UISlider,layer:DSProgressLayer,done:(slider:UISlider)->()){ slider.addTarget(self, action: #selector(self.actionSliderValueChange(_:)), forControlEvents: UIControlEvents.ValueChanged) sliderValueChangeBlock = { (slider:UISlider)->() in layer.i_progress = CGFloat(slider.value) } func impSliderValueChange(slider:UISlider){ layer.i_progress = CGFloat(slider.value) } done(slider: slider) } func actionSliderValueChange(slider:UISlider){ if (sliderValueChangeBlock != nil) { sliderValueChangeBlock!(slider: slider) } } }
相关文章推荐
- Swift专题讲解十六——ARC在Swift中的应用
- Swift-构造过程(Initialization)(十二)
- Swift 基本语法1
- iOS--- 初识Swift小结
- 【原】iOS学习之Swift之语法1(精简版)
- swift学习1-入门+基本语法
- Core Data 学习:Core Data Stack(Swift)
- Swift-UICollectionView布局之线性布局
- OC混编swift时EMBEDDED_CONTENT_CONTAINS_SWIFT错误的处理
- IOS-swift 动画03 CAAnimationGroup
- swift 中的问号跟感叹号
- Swift 元组
- 设置导航栏的标题 背景颜色和字体大小
- Swift 学习笔记(五)
- Swift-Swift - 访问控制(private,internal,public)
- Swift-协议
- Swift-扩展
- Swift-错误处理
- Swift-类型转换
- Swift-过滤器