Save/Retrieve 用户绘制Core Graphics &swift
Save/Retrieve User drawing Core Graphics &swift
大家好,我正在使用 apple pencil 开发一个应用程序,这方面的资源不多,所以希望这里有人可以提供帮助。
我的应用程序所做的是让用户使用苹果铅笔、UIImage 视图和核心图形来创建上下文等来绘制图像。我现在希望能够保存用户使用 NSData 理想地绘制的内容,但是由于它被保存为 PNG,我如何才能加载保存的文件并再次将其显示在 UIImage 屏幕上?
谢谢!
这是我的 Core Graphics 代码:
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
}
}
}
你可以从像这样的数据中得到图像,
UIImage(data:imageData,scale:1.0)
参考 UIImage
并获得这样的图像,您可以在 imageview
上显示该图像
希望这会有所帮助:)
您可以将其保存并检索为 NSData。我仍然不确定处理草图的最佳方式是什么,我也认为 NSData。会尝试并让你知道。
大家好,我正在使用 apple pencil 开发一个应用程序,这方面的资源不多,所以希望这里有人可以提供帮助。
我的应用程序所做的是让用户使用苹果铅笔、UIImage 视图和核心图形来创建上下文等来绘制图像。我现在希望能够保存用户使用 NSData 理想地绘制的内容,但是由于它被保存为 PNG,我如何才能加载保存的文件并再次将其显示在 UIImage 屏幕上?
谢谢!
这是我的 Core Graphics 代码:
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
}
}
}
你可以从像这样的数据中得到图像,
UIImage(data:imageData,scale:1.0)
参考 UIImage
并获得这样的图像,您可以在 imageview
希望这会有所帮助:)
您可以将其保存并检索为 NSData。我仍然不确定处理草图的最佳方式是什么,我也认为 NSData。会尝试并让你知道。