我在屏幕上有四个小圆圈,随机位置。这些小圆圈可以位于屏幕上的任何位置,并且位于MapView的前面。
如何根据这些圈创建形状?
此外,用户可以按下按钮随机更改圆圈的位置,因此必须重新创建形状。
到目前为止,我正在阅读有关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];
答案 0 :(得分:0)
您可以做的是添加一个透明背景颜色的UIImageView
作为MapView
的子视图(图片视图应与地图视图具有相同的框架)。
在viewDidLoad
中,您可以使用:
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,你应该阅读一些文档。它可能非常强大。