【发布时间】:2019-06-20 19:04:10
【问题描述】:
我正在使用MKMapSnapshotter 获取某个区域的图像。
我使用UIGraphicsGetCurrentContext()在图像上画线以显示多边形,
我可以设置线条颜色,但我无法为多边形设置填充颜色。
下面是代码
private func drawLineOnImage(snapshot: MKMapSnapshotter.Snapshot, coordinates: [CLLocationCoordinate2D]) -> UIImage {
let image = snapshot.image
UIGraphicsBeginImageContextWithOptions(getMapFrameSize(), true, 0)
image.draw(at: CGPoint.zero)
let context = UIGraphicsGetCurrentContext()
context!.setLineWidth(2.0)
context!.setStrokeColor(UIColor.red.cgColor)
context!.move(to: snapshot.point(for: coordinates[0]))
for i in 0...coordinates.count-1 {
context!.addLine(to: snapshot.point(for: coordinates[i]))
context!.move(to: snapshot.point(for: coordinates[i]))
}
context!.strokePath()
context!.setFillColor(UIColor.green.cgColor)
context!.fillPath()
let resultImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resultImage!
}
我怎样才能做到这一点?
解决方案:
private func drawLineOnImage(snapshot: MKMapSnapshotter.Snapshot, coordinates: [CLLocationCoordinate2D]) -> UIImage {
let image = snapshot.image
UIGraphicsBeginImageContextWithOptions(getMapFrameSize(), true, 0)
image.draw(at: CGPoint.zero)
let context = UIGraphicsGetCurrentContext()!
context.setLineWidth(2.0)
context.setStrokeColor(annotationColor.cgColor)
context.setFillColor(annotationColor.withAlphaComponent(0.5).cgColor)
var coordinates = coordinates
if let firstPoint = coordinates.first { context.move(to: snapshot.point(for: firstPoint)) }
context.move(to: snapshot.point(for: coordinates[0]))
coordinates.removeFirst()
coordinates.forEach { context.addLine(to: snapshot.point(for: $0)) }
context.drawPath(using: .fillStroke)
context.fillPath()
let resultImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resultImage!
}
【问题讨论】:
-
您的代码显示您正确设置了笔触颜色和填充颜色。您的实际问题是什么?
-
我想要边框颜色和填充颜色,但不幸的是我只得到边框颜色。如果我评论我的边框颜色代码,那么我会得到填充颜色。
标签: swift uigraphicscontext mkmapsnapshotter