繁体   English   中英

如何在UIView中独立绘制到CAShapeLayer?

[英]How to draw to CAShapeLayer in a UIView independently?

我继续在这里盯着我的Swift作业(之前的Stack Overflow问题)。 但是我现在面临一个新问题。 最后,我可以使用下面的代码(借助于@ njuri )使用UIBezierPathCAShapeLayer在我的河流图像上绘制点:

import UIKit

let beginPoint = UIBezierPath(ovalInRect: CGRectMake(130, 360, 20, 20))
let endPoint = UIBezierPath(ovalInRect: CGRectMake(260, 57, 20, 20))

let drawingView = UIView.init(frame: CGRect(x: 0, y: 0, width: 640, height: 400))
drawingView.addSubview(UIImageView(image: UIImage(named: "River.jpeg")))

let drawingLayer = CAShapeLayer()
drawingLayer.path = beginPoint.CGPath
drawingLayer.strokeColor = UIColor.greenColor().CGColor
drawingLayer.lineWidth = 3
drawingLayer.fillColor = UIColor.whiteColor().CGColor

drawingView.layer.addSublayer(drawingLayer)

let drawingLayer2 = CAShapeLayer()
drawingLayer2.path = endPoint.CGPath
drawingLayer.strokeColor = UIColor.redColor().CGColor
drawingLayer.lineWidth = 3
drawingLayer.fillColor = UIColor.whiteColor().CGColor

drawingView.layer.addSublayer(drawingLayer2)

这里的问题是结果不是我预期的那样,正如您在下面看到的,我的确有两个点,但是一个都是黑色的(而不是红色边框和白色填充),另一个是绿色边框的并有白色填充(如我所愿)

在此处输入图片说明

但是, 为什么会这样呢? 根据代码,我在这里有两个单独的CAShapeLayer ,它们具有不同的属性,分别添加到UIView中

好像您已复制/粘贴并忘记将drawingLayer重命名为drawingLayer2

let drawingLayer2 = CAShapeLayer()
drawingLayer2.path = endPoint.CGPath
drawingLayer2.strokeColor = UIColor.redColor().CGColor
drawingLayer2.lineWidth = 3
drawingLayer2.fillColor = UIColor.whiteColor().CGColor

因此, drawingLayer2仅使用strokeColorlineWidthfillColor默认值

您可以创建一个函数来简化代码。 而不是复制和粘贴,这容易出错。

func addDotWithPath(path: UIBezierPath) -> CAShapeLayer {
    let drawingLayer = CAShapeLayer()
    drawingLayer.path = path.CGPath
    drawingLayer.strokeColor = UIColor.greenColor().CGColor
    drawingLayer.lineWidth = 3
    drawingLayer.fillColor = UIColor.whiteColor().CGColor
    return drawingLayer
}

drawingView.layer.addSublayer(addDotWithPath(beginPoint))
drawingView.layer.addSublayer(addDitWithPath(endPoint))
let drawingLayer2 = CAShapeLayer()
drawingLayer2.path = endPoint.CGPath
drawingLayer.strokeColor = UIColor.redColor().CGColor
drawingLayer.lineWidth = 3
drawingLayer.fillColor = UIColor.whiteColor().CGColor

您只是忘记了一些绘画图层2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM