Я использую следующую функцию для рисования полилиний на снимке UIImage MKMapView. Функция работает, но для моих целей она слишком медленная. Есть ли способ ускорить процесс?

func drawLineOnImageFromLocations(image: UIImage, snapshot: MKMapSnapshot,
                                  polylineLocations: [CLLocation], color: CGColor) -> UIImage {

    UIGraphicsBeginImageContextWithOptions(image.size, true, 0)

    // draw original image into the context
    image.draw(at: CGPoint.zero)

    // get the context for CoreGraphics
    guard let context = UIGraphicsGetCurrentContext() else {
        return image
    }

    context.beginPath()
    context.setLineWidth(10)
    context.setStrokeColor(color)
    let coordinates = polylineLocations.map{$0.coordinate}
    var points = [CGPoint]()
    for coordinate in coordinates {
        let point = snapshot.point(for: coordinate)
        points.append(point)
    }
    context.addLines(between: points)
    context.strokePath()

    // get the image from the graphics context
    let resultImage = UIGraphicsGetImageFromCurrentImageContext()
    // end the graphics context
    UIGraphicsEndImageContext()

    return resultImage!
}
1
mistakeNot 17 Фев 2018 в 17:26

1 ответ

Лучший ответ

Оказывается звонит:

UIGraphicsBeginImageContextWithOptions(image.size, true, 0)

Это очень дорогая операция. Если вы можете провести рефакторинг своего кода, чтобы вызвать его только один раз, это значительно ускорит процесс.

1
mistakeNot 18 Фев 2018 в 14:41