动画

作者: FallPine | 来源:发表于2022-04-01 19:20 被阅读0次
    • 过渡动画

    1、公开动画效果:
    kCATransitionFade:翻页
    kCATransitionMoveIn:弹出
    kCATransitionPush:推出
    kCATransitionReveal:移除

    2、非公开动画效果:
    "cube":立方体
    "suckEffect":吸收
    "oglFlip":翻转
    "rippleEffect":波纹
    "pageCurl":卷页
    "cameraIrisHollowOpen":镜头开
    "cameraIrisHollowClose":镜头关

    3、动画方向类型:
    kCATransitionFromRight:从右侧开始实现过渡动画
    kCATransitionFromLeft:从左侧开始实现过渡动画
    kCATransitionFromTop:从顶部开始实现过渡动画
    kCATransitionFromBottom:从底部开始实现过渡动画

    let transition = CATransition.init()
    transition.duration = 3.0
    transition.type = .push //推送类型
    transition.subtype = .fromLeft //从左侧
    view.exchangeSubview(at: 1, withSubviewAt: 0)
    view.layer.add(transition, forKey: nil)
    
    • UIView动画

    UIView.animate(withDuration: 2.0, delay: 0.0, options: [.repeat]) {
         print("重复执行动画")
     }
    

    通过transform属性实现动画

    private lazy var redView: UIView = {
        let view = UIView.init(frame: CGRect.init(x: 200.0, y: 200.0, width: 60.0, height: 60.0))
        view.backgroundColor = .red
        return view
    }()
    
    // 旋转
    UIView.animate(withDuration: 2.0, delay: 5.0, options: [.repeat]) { [weak self] in
        self?.redView.transform = CGAffineTransform.init(rotationAngle: Double.pi / 2.0)
    }
    
    • 基础动画(CABasicAnimation)

    1、CABasicAnimation类只有三个属性:
    fromValue:开始值
    toValue:结束值
    Duration:动画的时间

    2、通过animationWithKeyPath键值对的方式设置不同的动画效果
    transform.scale
    transform.scale.x
    transform.scale.y
    transform.rotation.z
    opacity
    margin
    zPosition
    backgroundColor
    cornerRadius
    borderWidth
    bounds
    contents
    contentsRect
    cornerRadius
    frame
    hidden
    mask
    masksToBounds
    opacity
    position
    shadowColor
    shadowOffset
    shadowOpacity
    shadowRadius

    // 逐渐变透明
    let animation = CABasicAnimation(keyPath: "opacity")    // 这个key指定执行什么动画
    animation.fromValue = 1.0
    animation.toValue = 0.0
    animation.duration = 3.0
    redView.layer.add(animation, forKey: "Image-opacity")   // 这个key是用来标记动画层的
    redView.alpha = 0.0 // 不加这句,动画执行结束后会回到动画前的状态
    
    • 关键帧动画(CAKeyframeAnimation)

    CAKeyframeAnimation可以实现关键帧动画,这个类可以实现某一属性按照一串数值进行动画,就像是一帧一帧的制作出来一样

    let animation = CAKeyframeAnimation.init(keyPath: "position") // 这个key指定执行什么动画
             
    //设置5个位置点
    let p1 = CGPoint.init(x: 0.0, y: 0.0)
    let p2 = CGPoint.init(x: 300.0, y: 0.0)
    let p3 = CGPoint.init(x: 0.0, y: 400.0)
    let p4 = CGPoint.init(x: 300.0, y: 400.0)
    let p5 = CGPoint.init(x: 150.0, y: 200.0)
             
    //赋值
    animation.values = [p1, p2, p3, p4, p5]
             
    //每个动作的时间百分比
    animation.keyTimes = [NSNumber(value: 0.0),
                          NSNumber(value: 0.4),
                          NSNumber(value: 0.6),
                          NSNumber(value: 0.8),
                          NSNumber(value: 1.0), ]
             
    animation.delegate = self
    animation.duration = 6.0
    animation.isRemovedOnCompletion = false     // 是否在动画结束后移除动画
    animation.fillMode = .forwards      // 动画填充模式,.forwards配合isRemovedOnCompletion,不让动画结束后回到初始状态
    redView.layer.add(animation, forKey: "Image-Move")   // 这个key是用来标记动画层的
    
    extension Test: CAAnimationDelegate {
        func animationDidStart(_ anim: CAAnimation) {
            print("动画开始")
        }
        
        func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
            print("动画结束")
        }
    }
    

    参考文章:Swift - 使用CATransition制作过渡动画(页面切换转场效果)
    Swift - 通过设置视图的transform属性实现动画
    Swift - 使用CABasicAnimation实现动画效果
    Swift - 使用CAKeyframeAnimation实现关键帧动画
    Swift - 沿路径运动的动画实现(圆形、曲线、直线等路径轨迹)

    相关文章

      网友评论

          本文标题:动画

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