Swift 3 версия кода Swift 2 больше не влияет на массив байтов при рисовании поверх него

#ios #swift #swift3

#iOS #swift #swift3

Вопрос:

Я конвертирую некоторый код Swift 2 в Swift 3. Вот код в Swift 2

 if self.maskImagePixelData != nil {
    if let context:CGContext = CGBitmapContextCreate(
            amp;maskImagePixelData!,
            Int(inputImage.size.width),
            Int(inputImage.size.height),
            8,
            Int(inputImage.size.width),
            CGColorSpaceCreateDeviceGray(),
            CGImageAlphaInfo.None.rawValue ) {
        CGContextSetLineCap(context, CGLineCap.Round)
        CGContextSetLineJoin(context, CGLineJoin.Round)
        CGContextSetLineWidth(context, CGFloat(touchRadius * 2))
        if remove {
            CGContextSetBlendMode(context, CGBlendMode.PlusDarker)
        } else {
            CGContextSetGrayStrokeColor(context, 1.0, 1.0)
            CGContextSetBlendMode(context, CGBlendMode.PlusLighter)
        }
        let path = CGPathCreateMutable()
        for line:(start:CGPoint, end:CGPoint) in lines {
            CGPathMoveToPoint(path, nil, line.start.x, inputImage.size.height - line.start.y)
            CGPathAddLineToPoint(path, nil, line.end.x, inputImage.size.height - line.end.y)
        }
        CGContextAddPath(context, path)
        CGContextStrokePath(context)
    }
}
 

И вот как я преобразовал его в Swift 3

 if self.maskImagePixelData != nil {
    if let context:CGContext = CGContext(
            data: amp;maskImagePixelData!,
            width: Int(inputImage.size.width),
            height: Int(inputImage.size.height),
            bitsPerComponent: 8,
            bytesPerRow: Int(inputImage.size.width),
            space: CGColorSpaceCreateDeviceGray(),
            bitmapInfo: CGImageAlphaInfo.none.rawValue ) {
        context.setLineCap(CGLineCap.round)
        context.setLineJoin(CGLineJoin.round)
        context.setLineWidth(CGFloat(touchRadius * 2))
        if remove {
            context.setBlendMode(CGBlendMode.plusDarker)
        } else {
            context.setStrokeColor(gray: 1.0, alpha: 1.0)
            context.setBlendMode(CGBlendMode.plusLighter)
        }
        let path = CGMutablePath()
        for line:(start:CGPoint, end:CGPoint) in lines {
            path.move(to: CGPoint(x: line.start.x, y: inputImage.size.height - line.start.y))
            path.move(to: CGPoint(x: line.end.x, y: inputImage.size.height - line.end.y))
        }
        context.addPath(path)
        context.strokePath()
    }
}
 

В версии Swift 2 [UInt8] self.maskImagePixelData значение изменено, т.Е. Код манипулирует значениями в массиве байтов, в то время как в коде Swift 3 они остаются неизменными.

Это похоже на правильный перевод с Swift 2 на Swift 3; чего мне не хватает? Почему массив байтов не перезаписывается кодом Swift 3?

Комментарии:

1. Вероятно, вы хотели вызвать path.addLine вместо второго path.move фрагмента Swift 3.

2. Дох! Превосходно, спасибо. Я не скажу вам, как долго я смотрел на эти строки, пытаясь понять, что было не так! В мою защиту могу сказать, что в реальном коде есть несколько строк комментариев, которые, возможно, отвлекали меня.