在UIView上绘制点和线

12

我给自己设了一个任务,学习Swift编程语言,基于我在Apple Swift 网站上发现的一个例子:

这里输入图片描述

如您所见,画面中央有一条河流和几个点,形成了一条路径。于是我开始在互联网上寻找类似的河流图像,并创建了一个Xcode playground。这是我现在的代码:

这里输入图片描述

因此,我基本上有一个UIView视图,其中包含一个由我找到的河流图像组成的子视图和用UIBezierPath绘制的一个点。

我的第一个问题是:这是在UIView视图上绘图的正确方法吗?我的意思是使用UIBezierPath。我的第二个问题是:如何在UIView内部的精确坐标处绘制该点?(使用UIBezierPath还是其他方法?)

仅仅为了更精确,我的目的在于编写一个算法,使程序能够识别图像,并根据像素颜色从河流起点到终点绘制带有点的线,穿过中间。


在这里使用UIBezierPaths和CAShapeLayers来绘制圆形和“连接点”是完全可以的。 UIBezierPath有许多方法,例如moveToPoint:,允许您绘制线条。然后,CAShapeLayer可以表示该线条,以便您可以添加属性,例如描边宽度、颜色等。 - Christopher Kevin Howell
2个回答

13

要在UIView上绘制UIBezierPath,请按照以下步骤进行:

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)

2

这里是对方程中“lines”部分的一次尝试:

    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)
        }
    }

View Rendered with layers


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接