根据我在Apple Swift website上找到的一个例子,我给自己做了一个练习Swift的练习:
正如你所看到的那样,中间有一条河流和几个点,形成一条小路。所以我开始在互联网上寻找类似的河流图像,我已经创建了一个Xcode游乐场。这就是我现在所拥有的:
所以基本上我有一个UIView
,其子视图包含我找到的河流图像和一个用UIBezierPath
制作的点。
我的第一个问题是:这是吸引UIView的正确方法吗?我的意思是使用UIBezierPath
。我的第二个问题是:如何在UIView
内的精确坐标处绘制点? (UIBezierPath
或其他一切?)
更准确地说,我的目的是制作一个算法,让程序识别图像,并根据像素颜色从河的起点到终点绘制一条点线,在它之间传递中间。
答案 0 :(得分:10)
要在UIBezierPath
上绘制UIView
,请执行以下操作:
let xCoord = 10
let yCoord = 20
let radius = 8
let dotPath = UIBezierPath(ovalInRect: CGRectMake(xCoord, yCoord, radius, radius))
let layer = CAShapeLayer()
layer.path = dotPath.CGPath
layer.strokeColor = UIColor.blueColor().CGColor
drawingView.layer.addSublayer(layer)
此代码将在视图上绘制一个半径为8且坐标为10,20的点。
更新:Swift 4 +
let xCoord = 10
let yCoord = 20
let radius = 8
let dotPath = UIBezierPath(ovalIn: CGRect(x: xCoord, y: yCoord, width: radius, height: radius))
let layer = CAShapeLayer()
layer.path = dotPath.cgPath
layer.strokeColor = UIColor.blue.cgColor
drawingView.layer.addSublayer(layer)
答案 1 :(得分:2)
以下是对等式的线部分的尝试:
var offset:CGFloat = 0; var squareWidth:Int = 20
var squareRows:Int = Int(view.frame.size.width/CGFloat(squareWidth))
var squareColumns:Int = Int(view.frame.size.height/CGFloat(squareWidth))
for (index,element) in (0...squareRows).enumerate(){
for (column,element) in (0...squareColumns).enumerate(){
// Build The Square
let rectanglePath = UIBezierPath(roundedRect: CGRectMake(
view.frame.minX + CGFloat(squareWidth * index) - offset,
view.frame.minY + CGFloat(column * squareWidth), 20, 20
),
cornerRadius: 0.00)
// Style Square
let a = CAShapeLayer()
a.path = rectanglePath.CGPath
a.strokeColor = UIColor.whiteColor().CGColor
a.fillColor = nil
a.opacity = 0.3
a.lineWidth = 1.5
view.layer.insertSublayer(a, atIndex: 1)
}
}