Ios 保存/检索用户绘图核心图形&;敏捷的

Ios 保存/检索用户绘图核心图形&;敏捷的,ios,swift,core-graphics,Ios,Swift,Core Graphics,嘿,伙计们,我正在用苹果铅笔开发一个应用程序,而这方面的资源并不多,所以希望这里有人能帮上忙 我的应用程序所做的是让用户使用苹果铅笔、UIImage视图和核心图形绘制图像,以创建上下文等等。我现在希望能够保存用户使用NSData绘制的内容,但是,由于它被保存为PNG,我如何才能加载保存的文件并再次将其显示在UIImage屏幕上 谢谢 以下是我的核心图形代码: let π = CGFloat(M_PI) class NoteCanvasView: UIImageView { private v

嘿,伙计们,我正在用苹果铅笔开发一个应用程序,而这方面的资源并不多,所以希望这里有人能帮上忙

我的应用程序所做的是让用户使用苹果铅笔、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
    }
}
letπ=CGFloat(M_π)
类NoteCanvasView:UIImageView{
private var defaultLineWidth:CGFloat=1
私有变量drawColor:UIColor=UIColor.blackColor()
覆盖功能触摸移动(触摸:设置,带事件:UIEvent?){
guard let touch=touch.first else{return}
UIGraphicsBeginImageContextWithOptions(bounds.size,false,0.0)
let context=UIGraphicsGetCurrentContext()
//将前一个图像绘制到上下文中
图像?.drawInRect(边界)
drawStroke(上下文,触摸:触摸)
//更新图像
image=UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsSendImageContext()
}
private func drawStroke(上下文:CGContext?,触摸:UITouch){
让previousLocation=触摸。previousLocationInView(自)
让位置=触摸。位置查看(自)
//计算绘图笔划的线宽
让线宽=线宽用于绘图(上下文,触摸:触摸)
//定色
drawColor.setStroke()
//配置行
CGContextSetLineWidth(上下文,线宽)
CGContextSetLineCap(上下文,.Round)
//设置点
CGContextMoveToPoint(上下文,previousLocation.x,previousLocation.y)
CGContextAddLineToPoint(上下文,location.x,location.y)
//划一
CGContextStrokePath(上下文)
}
专用func线宽绘图(上下文:CGContext?,触摸:UITouch)->CGFloat{
var lineWidth=defaultLineWidth
返回线宽
}
func saveNote(){
让数据=UIImagePngResentation(图像!)
让userDefaults=NSUserDefaults.standardUserDefaults()
setObject(数据,forKey:“test123”)
userDefaults.synchronize()
}
func retrieveNote(){
如果let data=NSUserDefaults.standardUserDefaults().dataForKey(“test123”),则let image=UIImage(数据:数据){
}
}
func setStrokeColor(颜色:UIColor){
drawColor=颜色
}
func设置行程宽度(大小:CGFloat){
defaultLineWidth=大小
}
func clearCanvas(动画:Bool){
如果动画{
UIView.animateWithDuration(0.2,动画:{
self.alpha=0
},完成:{在中完成
self.alpha=1
self.image=nil
})
}否则{
图像=零
}
}

}

您可以从以下数据获取图像:

 UIImage(data:imageData,scale:1.0)
获取
UIImage
参考并获得这样的图像,您可以在
imageview


希望这会有所帮助:)

您可以将其保存并作为NSData检索。我仍然不确定处理草图的最佳方式是什么,我也认为是NSData。我会试试,让你知道

你说的imageview是指我的UIImageView吗??因为当我试着把它做成背景图像时,它并没有向上显示它的效果!我询问并犹豫的唯一原因是,当我尝试将故事板中的图像设置为UIImageView时,它会显示在编辑器中,但当我运行它时,它不会显示。谢谢你的帮助!若你们觉得这有帮助,那个么就接受这个答案,这样其他有类似问题的人也可以使用它。:)很抱歉,新堆栈溢出!我打了勾,它是绿色的,所以我假设它:)再次感谢你!