[英]How to draw a circle using CAShapeLayer to be centered in a custom UIView in swift programmatically
[英]How to draw to CAShapeLayer in a UIView independently?
我繼續在這里盯着我的Swift作業(之前的Stack Overflow問題)。 但是我現在面臨一個新問題。 最后,我可以使用下面的代碼(借助於@ 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)
這里的問題是結果不是我預期的那樣,正如您在下面看到的,我的確有兩個點,但是一個都是黑色的(而不是紅色邊框和白色填充),另一個是綠色邊框的並有白色填充(如我所願)
但是, 為什么會這樣呢? 根據代碼,我在這里有兩個單獨的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
僅使用strokeColor
, lineWidth
和fillColor
默認值
您可以創建一個函數來簡化代碼。 而不是復制和粘貼,這容易出錯。
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.