高效绘图 CAShapeLayer Swift

高效绘图 CAShapeLayer Swift,第1张

概述参考原文链接 原文使用ObjC编码, 我翻译为了Swift. 先看运行效果图 实现一个绘图板功能的view, 可以使用CoreGraphics调用draw完成, 缺点是在绘制的后面的时候每次都重绘制全部内容, 非常没有必要. 另一个建议, 使用CAShapeLayer纪录绘制的路径, 而且CAShapeLayer是专门为绘制路径所优化的layer, 当然更有效率. 同时最重要的一点, 声明当前UI

参考原文链接

原文使用ObjC编码,我翻译为了Swift. 先看运行效果图

实现一个绘图板功能的vIEw,可以使用CoreGraphics调用draw完成,缺点是在绘制的后面的时候每次都重绘制全部内容,非常没有必要. 另一个建议,使用CAShapeLayer纪录绘制的路径,而且CAShapeLayer是专门为绘制路径所优化的layer,当然更有效率. 同时最重要的一点,声明当前UIVIEw实现的layerClass为CAShapeLayer.

使用专有图层可以完成相应的更近恰当的任务,这样会比直接使用CoreGraphics绘制更加的高效.

////  DrawingVIEw.swift//  layerDemo////  Created by grath on 15/9/17.//  copyright © 2015年 stone. All rights reserved.//import UIKitclass DrawingVIEw: UIVIEw {    var path = UIBezIErPath()    //    init() {        super.init(frame: CGRectZero)        let shapeLayer = self.layer as! CAShapeLayer        shapeLayer.linewidth = 2.0        shapeLayer.lineCap = kCAlineCapRound        shapeLayer.strokecolor = UIcolor.redcolor().CGcolor        shapeLayer.fillcolor = UIcolor.clearcolor().CGcolor        shapeLayer.masksToBounds = true //裁减掉超出当前vIEw的layer绘制        shapeLayer.shadowOffset = CGSizeMake(2.0,4.0)        shapeLayer.shadowRadius = 2.0        shapeLayer.shadowcolor = UIcolor.purplecolor().CGcolor    }    required init?(coder aDecoder: NSCoder) {        super.init(coder: aDecoder)    }        overrIDe class func layerClass() -> AnyClass {        //指定返回的layer类型 默认返回CALayer类型        return CAShapeLayer.classForCoder()    }        overrIDe func touchesBegan(touches: Set<UItouch>,withEvent event: UIEvent?) {        let p = touches.first?.locationInVIEw(self)        path.movetoPoint(p!)    }    overrIDe func touchesMoved(touches: Set<UItouch>,withEvent event: UIEvent?) {        let p = touches.first?.locationInVIEw(self)        path.addlinetoPoint(p!) //增加绘制点        let shapeLayer = self.layer as! CAShapeLayer        //指定path 开始绘制        shapeLayer.path = self.path.CGPath    }}

以上为实现代码.

使用方法如下:

func addDrawVIEw() {        let drawVw = DrawingVIEw()        drawVw.layer.borderWIDth = 4.0        drawVw.layer.bordercolor  = UIcolor.graycolor().CGcolor        drawVw.frame = CGRectInset(self.vIEw.bounds,50,100)                var atrans = CAtransform3DIDentity        atrans.m34 = -1/500.0        atrans = CAtransform3DRotate(atrans,CGfloat(M_PI_4),1,0)        //drawVw.layer.transform = atrans                vIEw.addSubvIEw(drawVw)    }
总结

以上是内存溢出为你收集整理的高效绘图 CAShapeLayer Swift全部内容,希望文章能够帮你解决高效绘图 CAShapeLayer Swift所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1084461.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存