美文网首页
CABasicAnimation动画

CABasicAnimation动画

作者: 雷霸龙 | 来源:发表于2019-11-13 17:28 被阅读0次

    CABasicAnimation是CAPropertyAnimation的子类,CAPropertyAnimation有一个字符串属性keyPath,keyPath内容是CALayer的可动画Animatable属性,我们可以指定CALayer的某个属性名为keyPath,并且对CALayer的这个属性的值进行修改,达到相应的动画效果。
    属性说明:

    duration
    动画时长
    
    fromValue
    动画起始的位置,根据keyPath的值不一样,这里的值也不一样;比如keyPath是position的时候,fromValue的值就是[NSValue valueWithCGPoint:<#(CGPoint)#>];
    
    toValue
    动画结束位置,和fromValue的值一致
    
    repeatCount
    动画执行次数
    
    Autoreverses
    当你设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到 开始的值。
    
    removedOnCompletion
    这个是在动画结束后,是否会回到开始的值,默认是YES。如果设置为NO,则动画结束后,会保持动画结束后的形态,但layer的相关属性值并没有改变
    
    Duration
    Duration 这个参数你已经相当熟悉了。它设定开始值到结束值花费的时间。期间会被速度的属性所影响。 RemovedOnCompletion 这个属性默认为 YES,那意味着,在指定的时间段完成后,动画就自动的从层上移除了。这个一般不用。
    
    假如你想要再次用这个动画时,你需要设定这个属性为 NO。这样的话,下次你在通过-set 方法设定动画的属 性时,它将再次使用你的动画,而非默认的动画。
    
    Speed
    默认的值为 1.0.这意味着动画播放按照默认的速度。如果你改变这个值为 2.0,动画会用 2 倍的速度播放。 这样的影响就是使持续时间减半。如果你指定的持续时间为 6 秒,速度为 2.0,动画就会播放 3 秒钟---一半的 持续时间。
    
    BeginTime
    这个属性在组动画中很有用。它根据父动画组的持续时间,指定了开始播放动画的时间。默认的是 0.0.组 动画在下个段落中讨论“Animation Grouping”。
    
    TimeOffset
    如果一个时间偏移量是被设定,动画不会真正的可见,直到根据父动画组中的执行时间得到的时间都流逝了。
    
    RepeatCount
    默认的是 0,意味着动画只会播放一次。如果指定一个无限大的重复次数,使用 1e100f。这个不应该和 repeatDration 属性一块使用。
    
    RepeatDuration
    这个属性指定了动画应该被重复多久。动画会一直重复,直到设定的时间流逝完。它不应该和 repeatCount 一起使用。
    

    keyPath属性说明:

    transform.scale = 比例转换
    transform.rotation = 旋转
    transform.rotation.x = x轴旋转
    transform.rotation.y = y轴旋转
    opacity = 透明度
    margin = 边距
    position = 位移
    backgroundColor = 背景颜色
    cornerRadius = 圆角
    borderWidth = 边框宽度
    bounds = 位置,体积
    contents = 内容
    contentsRect = 面积
    frame = 位置,体积
    hidden = 是否隐藏
    shadowColor = 阴影颜色
    shadowOffset = 阴影偏移
    shadowOpacity = 阴影透明
    shadowRadius = 阴影半径
    

    以下是一些CABasicAnimation动画的效果:

            button = UIButton(type: .custom)
            button?.frame = CGRect(x: 50, y: 100, width: UIScreen.main.bounds.width - 100, height: 50)
            button?.backgroundColor = UIColor.purple
            button?.setTitle("测试", for: .normal)
            view.addSubview(button!)
            
            // 1、位置移动
            let animation : CABasicAnimation = CABasicAnimation()
            animation.keyPath = "position"
            let positionX : CGFloat = button!.frame.origin.x + 0.5 * button!.frame.size.width
            let positionY : CGFloat = button!.frame.origin.y + 0.5 * button!.frame.size.height + 100
            animation.toValue = NSValue(cgPoint: CGPoint(x: positionX, y: positionY))
            animation.byValue = NSValue(cgPoint: CGPoint(x: 100, y: 100))
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 位置y轴移动
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "transform.translation.y"
            animation.toValue = 100
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 位置x轴移动
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "transform.translation.x"
            animation.toValue = 100
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 2、缩放
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "transform.scale"
            animation.fromValue = 1.0
            animation.toValue = 0.6
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 缩放 x轴, 也可以y轴
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "transform.scale.x"
            animation.fromValue = 1.0
            animation.toValue = 0.6
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 3、旋转 x轴和y轴也可以
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "transform.rotation"
            animation.toValue = Double.pi * 2
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 圆角
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "cornerRadius"
            animation.toValue = 25
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 边框
            button?.layer.borderColor = UIColor.gray.cgColor
            button?.layer.cornerRadius = 10.0
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "borderWidth"
            animation.toValue = 10
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 背景颜色
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "backgroundColor"
            animation.fromValue = UIColor.green.cgColor
            animation.toValue = UIColor.red.cgColor
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 边框颜色
            button?.layer.borderWidth = 5
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "borderColor"
            animation.fromValue = UIColor.green.cgColor
            animation.toValue = UIColor.cyan.cgColor
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            // 淡入
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "opacity"
            animation.fromValue = UIColor.green.cgColor
            animation.toValue = 1.0
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
            
            //阴影渐变
            button?.layer.shadowColor = UIColor.red.cgColor
            button?.layer.shadowOpacity = 0.5
            let animation:CABasicAnimation = CABasicAnimation()
            animation.keyPath = "shadowOffset"
            animation.toValue = NSValue(cgSize: CGSize(width: 10, height: 10))
            animation.duration = 2.0
            animation.fillMode = CAMediaTimingFillMode.forwards
            animation.isRemovedOnCompletion = false
            button?.layer.add(animation, forKey: nil)
    

    相关文章

      网友评论

          本文标题:CABasicAnimation动画

          本文链接:https://www.haomeiwen.com/subject/uukkictx.html