美文网首页
2023-12-21动画

2023-12-21动画

作者: YN吾爱 | 来源:发表于2023-12-20 10:08 被阅读0次

注意点,防止动作完成后返回原始点

        animationGroup.fillMode = .forwards //要配合使用 forwards  isRemovedOnCompletion

        animationGroup.isRemovedOnCompletion = false // 是否在动画完成后从 Layer 层上移除  回到最开始状态

importUIKit

///请求成功返回闭包

public typealias AnimationFinishClosure = () -> Void

class LWAnimationTool: NSObject {

    public static let shared = LWAnimationTool()

    var layer:CATextLayer? = CATextLayer()

    private override init() {

        super.init()

    }

    func carAnimation(startView:UIView,endView:UIView,duration:CGFloat,finish:AnimationFinishClosure){

        letstartPoint =getPoint(view: startView)

        letendPoint =getPoint(view: endView)

//        let startPoint = CGPointMake(100, 100)

//        let endPoint = CGPointMake(200, 600)

        letwindow:UIWindow=keyWindow()

        if(layer==nil){

            layer=CATextLayer()

        }

        layer!.alignmentMode = .center//文字对齐方式

        layer!.contentsGravity = .resizeAspectFill;

        layer!.backgroundColor = UIColor.red.cgColor

        layer!.bounds=CGRect(x: -100,y: -20,width: 16,height: 16)

        layer!.cornerRadius = 8;

        layer!.masksToBounds = true;

        window.layer.addSublayer(layer!)

        //初始化旋转动画

//        let animation = CABasicAnimation(keyPath: "transform.rotation.z")

//        //设置属性

//        animation.toValue = NSNumber(value: Double.pi * 11)

//        animation.duration = duration

//        animation.isCumulative = true;

//        animation.repeatCount = 0;

        //初始化抛物线动画

        letpathAnimation =CAKeyframeAnimation(keyPath:"position")

        //抛物线的顶点,可以根据需求调整

        letcontrolPoint =CGPointMake(startPoint.x- 80, startPoint.y- 80);

        //生成路径

        letpath =UIBezierPath();

        //描述路径

        path.move(to: startPoint)

        path.addQuadCurve(to: endPoint,controlPoint: controlPoint)

        //设置属性

//        pathAnimation.duration = duration

        pathAnimation.path= path.cgPath

//        pathAnimation.fillMode = .forwards //要配合使用 forwards  isRemovedOnCompletion

//        pathAnimation.isRemovedOnCompletion = false // 是否在动画完成后从 Layer 层上移除  回到最开始状态

        //缩放

        letscaleAnimation =CABasicAnimation(keyPath:"transform.scale")

        scaleAnimation.fromValue= 1.0

        scaleAnimation.toValue= 0.2

        scaleAnimation.beginTime= 0.1

//        scaleAnimation.fillMode = .forwards

//        scaleAnimation.isRemovedOnCompletion = false

//        scaleAnimation.duration = duration

        //透明度

        letalphaAnimation =CABasicAnimation(keyPath:"opacity")

        alphaAnimation.fromValue= 1.0

        alphaAnimation.toValue= 0.1

//        alphaAnimation.fillMode = .forwards

//        alphaAnimation.isRemovedOnCompletion = false

        //初始化动画组

        letanimationGroup =CAAnimationGroup()

//        animationGroup.animations = [animation,pathAnimation]

        animationGroup.animations= [pathAnimation,scaleAnimation,alphaAnimation]

        animationGroup.fillMode = .forwards //要配合使用 forwards  isRemovedOnCompletion

        animationGroup.isRemovedOnCompletion = false // 是否在动画完成后从 Layer 层上移除  回到最开始状态

        animationGroup.duration= duration

        animationGroup.delegate=self

        layer!.add(animationGroup,forKey:"group")

        DispatchQueue.main.asyncAfter(deadline: .now() + duration) {

            self.layer!.removeFromSuperlayer()

        }

    }

    funcgetPoint(view:UIView) ->CGPoint{

        letwindow:UIWindow=keyWindow()

        letrect = window.convert(view.frame,from: view.superview)

        letpoint =CGPoint(x: rect.origin.x,y: rect.origin.y)

        returnpoint

    }

}

extension LWAnimationTool: CAAnimationDelegate{

    funcanimationDidStop(_anim:CAAnimation,finishedflag:Bool) {

//        layer = nil

//        let an = layer!.animation(forKey: "group")

//        if(anim == layer!.animation(forKey: "group")){

//            layer!.removeFromSuperlayer()

//            layer = nil

//        }

    }

}

相关文章

  • Android回顾--(十六) 动画简析

    动画: 补间动画(Tween动画) 帧动画(Frame动画) 属性动画(Property动画) 补间动画 特点: ...

  • 在山西太原,做个二维动画需要哪些制作流程?

    二维动画有哪些类型? flash动画,课件动画,mg动画,ae动画,GIF动画,手绘动画,网页动画,企业动画,宣传...

  • Android 动画

    【Android 动画】 动画分类补间动画(Tween动画)帧动画(Frame 动画)属性动画(Property ...

  • 动画学习

    动画 分为 组动画,属性动画,渐变动画,其中属性动画包括 普通动画和关键帧动画,其他动弹动画,动画层分为 pres...

  • Android动画

    Android动画分类: 视图动画:补间动画、逐帧动画 属性动画 视图动画 补间动画 可以在xml中定义动画,然后...

  • iOS动画

    iOS动画-从UIView动画说起iOS动画-Transform和KeyFrame动画iOS动画-layout动画...

  • Android动画之视图动画

    分类 Android动画主要包括视图动画和属性动画。视图动画包括Tween动画和Frame动画。Tween动画又包...

  • Android 动画

    android动画分为三种 帧动画,视图动画(补间动画),属性动画逐帧动画 视图动画 属性动画 Window和A...

  • android动画

    动画: 分类:分为视图动画和属性动画,其中视图动画又分为补间动画和逐帧动画。补间动画又分为平移动画、缩放动画、旋转...

  • Android中的动画概述

    动画可以分为三类:View动画,帧动画,属性动画。 一、View动画 1.View动画包括四种:平移动画,缩放动画...

网友评论

      本文标题:2023-12-21动画

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