
参考原文链接
原文使用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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)