[英]How to draw to CAShapeLayer in a UIView independently?
I am continuing in my Swift homework I have stared here (previous Stack Overflow question). 我继续在这里盯着我的Swift作业(之前的Stack Overflow问题)。 But I'm facing a new problem now.
但是我现在面临一个新问题。 Finally I am able to draw dots on my river image just by using a
UIBezierPath
and a CAShapeLayer
using the code below (with the help of @ njuri ): 最后,我可以使用下面的代码(借助于@ njuri )使用
UIBezierPath
和CAShapeLayer
在我的河流图像上绘制点:
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)
The problem here is that the result is not how I expected to be, as you can see below I do have two dots, but one is all black (instead of having a red border and white fill) and the other one is green-bordered and has a white fill (as I wanted to be) 这里的问题是结果不是我预期的那样,正如您在下面看到的,我的确有两个点,但是一个都是黑色的(而不是红色边框和白色填充),另一个是绿色边框的并有白色填充(如我所愿)
But, why is this happening? 但是, 为什么会这样呢? According to the code I have two separate
CAShapeLayer
s here, which have different properties and which I am adding to the UIView separately 根据代码,我在这里有两个单独的
CAShapeLayer
,它们具有不同的属性,分别添加到UIView中
Looks like you've copy/pasted and forgot to rename drawingLayer
to drawingLayer2
好像您已复制/粘贴并忘记将
drawingLayer
重命名为drawingLayer2
let drawingLayer2 = CAShapeLayer()
drawingLayer2.path = endPoint.CGPath
drawingLayer2.strokeColor = UIColor.redColor().CGColor
drawingLayer2.lineWidth = 3
drawingLayer2.fillColor = UIColor.whiteColor().CGColor
So, drawingLayer2
is just using default values for strokeColor
, lineWidth
and fillColor
因此,
drawingLayer2
仅使用strokeColor
, lineWidth
和fillColor
默认值
You could create a function to simplify your code. 您可以创建一个函数来简化代码。 Instead of copying and pasting, which is error prone.
而不是复制和粘贴,这容易出错。
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
You simply forgot some drawingLayer 2 您只是忘记了一些绘画图层2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.