在屏幕上绘制基于CGPoint的UIView

时间:2016-02-13 22:12:11

标签: ios iphone uiview core-graphics uibezierpath

我在屏幕上有四个小圆圈,随机位置。这些小圆圈可以位于屏幕上的任何位置,并且位于MapView的前面。

enter image description here

如何根据这些圈创建形状?

enter image description here

此外,用户可以按下按钮随机更改圆圈的位置,因此必须重新创建形状。

enter image description here

到目前为止,我正在阅读有关UIBezierPath的内容,而且我能够根据点创建一个形状,但我无法做到这一点。

UIBezierPath* bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint: CGPointMake(52, 33)];
[bezierPath addLineToPoint: CGPointMake(145, 19)];
[bezierPath addLineToPoint: CGPointMake(158, 79)];
[bezierPath addLineToPoint: CGPointMake(66, 103)];
[UIColor.grayColor setFill];
[bezierPath fill];

1 个答案:

答案 0 :(得分:0)

您可以做的是添加一个透明背景颜色的UIImageView作为MapView的子视图(图片视图应与地图视图具有相同的框架)。

viewDidLoad中,您可以使用:

开始imageContext

UIGraphicsBeginImageContext(self.imageView.frame.size)

然后,您可以使用CGMutablePath

在点之间绘制线条
func drawLines()
    {
        let point1 = CGPointMake(20, 100)
        let point2 = CGPointMake(230, 150)
        let point3 = CGPointMake(40, 340)

        let points = [point1, point2, point3]

        let context = UIGraphicsGetCurrentContext()
        CGContextClearRect(context, self.imageView.frame)

        let pathRef = CGPathCreateMutable();

        for var i = 0; i < points.count; i++
        {
            let point = points[i]

            if i == 0
            {
                CGPathMoveToPoint(pathRef, nil, point.x, point.y)
            }
            else
            {
                CGPathAddLineToPoint(pathRef, nil, point.x, point.y)
            }
        }

        CGContextSetLineWidth(context, 5.0)
        CGPathCloseSubpath(pathRef)
        CGContextAddPath(context, pathRef);
        CGContextSetStrokeColorWithColor(context, UIColor.brownColor().CGColor)
        CGContextStrokePath(context)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        self.imageView.image = image
    }

当然,您应该根据需要调整此方法,但这可以动态运行。

这不是唯一的解决方案。如果你想更多地了解Core Graphics,你应该阅读一些文档。它可能非常强大。