Сохранить / восстановить пользовательский рисунок Core Graphics &swift

Привет, ребята, так что я работаю над приложением, используя яблочный карандаш, и не так много ресурсов по этому вопросу, так что, надеюсь, кто-то здесь может помочь.

Что я делаю в своем приложении, так это в том, что он позволяет пользователю рисовать изображение, используя яблочный карандаш, представление UIImage и основную графику для создания контекста и тому подобное. Теперь я хочу иметь возможность сохранить то, что пользователь нарисовал в идеале, используя NSData, однако, поскольку он сохраняется как PNG, как я могу загрузить этот сохраненный файл и снова вывести его на экран UIImage?

Спасибо!

Вот мой основной графический код:

let π = CGFloat(M_PI)

class NoteCanvasView: UIImageView {

private var defaultLineWidth:CGFloat = 1

private var drawColor: UIColor = UIColor.blackColor()

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    guard let touch = touches.first else { return }

    UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0)
    let context = UIGraphicsGetCurrentContext()

    // Draw previous image into context
    image?.drawInRect(bounds)

    drawStroke(context, touch: touch)

    // Update image
    image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
}

private func drawStroke(context: CGContext?, touch: UITouch) {
    let previousLocation = touch.previousLocationInView(self)
    let location = touch.locationInView(self)

    // Calculate line width for drawing stroke
    let lineWidth = lineWidthForDrawing(context, touch: touch)

    // Set color
    drawColor.setStroke()

    // Configure line
    CGContextSetLineWidth(context, lineWidth)
    CGContextSetLineCap(context, .Round)


    // Set up the points
    CGContextMoveToPoint(context, previousLocation.x, previousLocation.y)
    CGContextAddLineToPoint(context, location.x, location.y)
    // Draw the stroke
    CGContextStrokePath(context)

}

private func lineWidthForDrawing(context: CGContext?, touch: UITouch) -> CGFloat {

    var lineWidth = defaultLineWidth

    return lineWidth
}
func saveNote(){
    let data = UIImagePNGRepresentation(image!)
    let userDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setObject(data, forKey: "test123")
    userDefaults.synchronize()

}
func retrieveNote(){
    if let data = NSUserDefaults.standardUserDefaults().dataForKey("test123"),let image = UIImage(data: data){

    }

}

func setStrokeColor(color: UIColor){
    drawColor = color
}
func setStrokeWidth(size: CGFloat){
    defaultLineWidth = size
}

func clearCanvas(animated animated: Bool) {
    if animated {
        UIView.animateWithDuration(0.2, animations: {
            self.alpha = 0
            }, completion: { finished in
                self.alpha = 1
                self.image = nil
        })
    } else {
        image = nil
    }
}

}

2 ответа

Решение

Вы можете получить изображение обратно из данных, как,

 UIImage(data:imageData,scale:1.0)

принимать UIImage ссылаться и получить изображение, как это, и вы можете отобразить это изображение на imageview

надеюсь это поможет:)

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

Другие вопросы по тегам