swift 绘制、动画基础 CAShapeLayer、CABasicAnimation

//MARK: 绘制虚线
        let layer0 = CAShapeLayer()
        layer0.strokeColor = UIColor.green.cgColor
        layer0.linewidth = 0.5
        //线段宽度10 间距10
        let arr :NSArray = NSArray(array: [10,10])
        //基于线段的起始位置
        layer0.lineDashPhase = 0
        layer0.lineDashPattern = arr as? [NSNumber]
        self.view.layer.addSublayer(layer0)
        //路径
        let mdotteShapePath = CGMutablePath()
        mdotteShapePath.move(to: CGPoint(x:0,y: 30))
        mdotteShapePath.addLine(to: CGPoint(x:UIScreen.main.bounds.size.width,y:30))
        layer0.path = mdotteShapePath

        //MARK: 实心矩形
        let layer = CAShapeLayer()
        layer.frame = CGRect(x:80,y:50,width:150,height:50)
        layer.backgroundColor = UIColor.green.cgColor
        view.layer.addSublayer(layer)

        //MARK: 矩形框
        let layer1 = CAShapeLayer()
        layer1.fillColor = UIColor.clear.cgColor
        layer1.strokeColor = UIColor.green.cgColor
        view.layer.addSublayer(layer1)

        let path1 = UIBezierPath(rect: CGRect(x:80,y:110,height:50))
        layer1.path = path1.cgPath

        //MARK: 圆角矩形
        let path2 = UIBezierPath(roundedRect: CGRect(x:80,y:170,height:50),cornerRadius: 50)
        let layer2 = CAShapeLayer()
        layer2.path = path2.cgPath
        layer2.fillColor = UIColor.clear.cgColor
        layer2.strokeColor = UIColor.green.cgColor
        view.layer.addSublayer(layer2)

        //MARK: 圆形
        let radius: CGFloat = 20
        let startAngle: CGFloat = 0.0
        let endAngle: CGFloat = CGFloat(M_PI * 2)
        let path3 = UIBezierPath(arcCenter: view.center,radius: radius,startAngle: startAngle,endAngle: endAngle,clockwise: true)
        let layer3 = CAShapeLayer()
        layer3.path = path3.cgPath
        layer3.fillColor = UIColor.clear.cgColor
        layer3.strokeColor = UIColor.green.cgColor
        view.layer.addSublayer(layer3)

        //MARK: 贝塞尔曲线
        let startPoint = CGPoint(x:20,y:400)
        let endPoint = CGPoint(x:320,y:400)
        let controlPoint = CGPoint(x:170,y:300)
        let controlPoint1 = CGPoint(x:120,y:300)
        let controlPoint2 = CGPoint(x:220,y:500)

       

        //曲线1
        let path10 = UIBezierPath()
        let layer10 = CAShapeLayer()
        path10.move(to: startPoint)
        path10.addQuadCurve(to: endPoint,controlPoint: controlPoint)
        layer10.path = path10.cgPath
        layer10.fillColor = UIColor.clear.cgColor
        layer10.strokeColor = UIColor.black.cgColor
        view.layer.addSublayer(layer10)


        //曲线2
        let path20 = UIBezierPath()
        let layer20 = CAShapeLayer()
        path20.move(to: startPoint)
        path20.addCurve(to: endPoint,controlPoint1: controlPoint1,controlPoint2: controlPoint2)
        layer20.path = path20.cgPath
        layer20.fillColor = UIColor.clear.cgColor
        layer20.strokeColor = UIColor.black.cgColor
        view.layer.addSublayer(layer20)

        //MARK: 动画
        //动画1
        let animation = CABasicAnimation(keyPath: "strokeEnd")
        animation.fromValue = 0
        animation.tovalue = 1
        animation.duration = 2
        layer10.add(animation,forKey: "")

        //动画2
        layer20.strokeStart = 0
        layer20.strokeEnd = 1
        let animation21 = CABasicAnimation(keyPath: "strokeStart")
        //起始位置中间 结束为止左端
        animation21.fromValue = 0.5
        animation21.tovalue = 0
        animation21.duration = 2
        let animation22 = CABasicAnimation(keyPath: "strokeEnd")
        //起始位置中间 结束为止右端
        animation22.fromValue = 0.5
        animation22.tovalue = 1
        animation22.duration = 2
        layer20.add(animation21,forKey: "")
        layer20.add(animation22,forKey: "")

        //动画3
        let animation23 = CABasicAnimation(keyPath: "linewidth")
        animation23.fromValue = 1
        animation23.tovalue = 10
        animation23.duration = 5
        layer1.add(animation23,forKey: "")

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...