2015-12-11 38 views
1

我繼續在我的斯威夫特作業我已盯着here(前堆棧溢出問題)。但我現在正面臨一個新問題。最後,我能夠利用我的河流像點只是使用UIBezierPathCAShapeLayer使用下面的代碼(用@njuri幫助):如何獨立繪製到UIView中的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) 

這裏的問題是,結果是不我的期望是如何,正如你可以看到下面我有兩個點,但其中一個是全黑(而不是有一個紅色邊框和白色填充),另一個是綠色邊界,並有一個白色填充(正如我想要的是)

enter image description here

但是,爲什麼發生這種情況?根據該法,我有兩個獨立的CAShapeLayer這兒,它有不同的屬性和我分別增加了UIView

+0

當您複製和粘貼一些重複的代碼,你會忘記重新命名的變量,會出現因爲副本變量沒有錯誤這是一個常見的問題在此範圍內可用。有一個輔助函數可以讓你的代碼更安全,更簡單。 –

回答

2

您好像複製/粘貼,忘了重命名drawingLayerdrawingLayer2

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)) 
0
let drawingLayer2 = CAShapeLayer() 
drawingLayer2.path = endPoint.CGPath 
drawingLayer.strokeColor = UIColor.redColor().CGColor 
drawingLayer.lineWidth = 3 
drawingLayer.fillColor = UIColor.whiteColor().CGColor 

你只是忘記一些drawingLayer