簡體   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