2

我想知道如何将我的应用程序的绘图像手机上的图像一样保存,然后将其发送到服务器。

这是我的代码。

我有这门课,我在那里画画。

import Foundation
import UIKit

class Sign: UIViewController
{
@IBOutlet weak var btnSave: UIButton!
@IBOutlet weak var btnClear: UIButton!

let canvas  = Canvas()

fileprivate func setupLayout() {
    let stackView = UIStackView(arrangedSubviews: [btnClear,btnSave])

    view.addSubview(stackView)

    stackView.distribution = .fillEqually
    stackView.translatesAutoresizingMaskIntoConstraints = false
    stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
}

override func viewDidLoad() {
    view.addSubview(canvas)
    canvas.backgroundColor = .white
    canvas.frame = view.frame

    setupLayout()


}
@IBAction func ClearCanvas(_ sender: Any) {
    canvas.clear()        
}

@IBAction func SaveCanvas(_ sender: Any) {

}
}

我有这个 Canvas 类也有按钮的功能。只是想知道如何处理或将我的视图与绘图转换为图像并将其保存然后将其发送到服务器。

import Foundation
import UIKit

class Canvas: UIView {

func clear(){
    lines.removeAll()
    setNeedsDisplay()
}
override func draw(_ rect: CGRect) {

    guard let context = UIGraphicsGetCurrentContext() else {return}

    context.setStrokeColor(UIColor.black.cgColor)
    context.setLineWidth(5)
    context.setLineCap(.butt)

    lines.forEach { (line) in
        for (i , p) in line.enumerated(){
            if i == 0 {
                context.move(to: p)
            } else {
                context.addLine(to: p)
            }
        }
    }


    context.strokePath()

}

var lines = [[CGPoint]]()

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    lines.append([CGPoint]())
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let point = touches.first?.location(in: nil) else {return}

    guard var lastline = lines.popLast() else { return }
    lastline.append(point)
    lines.append(lastline)

    setNeedsDisplay()
}
}
4

2 回答 2

3

您可以在您的类中添加一个函数Canvas来绘制图像并将图像数据更新到您的服务器。

func screenShot() -> UIImage? {
    //Create the UIImage
    UIGraphicsBeginImageContext(self.frame.size)
    self.layer.renderInContext(UIGraphicsGetCurrentContext())
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}
于 2019-03-05T20:55:43.523 回答
0

当您在名为 Canvas 的视图中绘制了所有内容时,为什么不将此视图转换为像截屏一样的图像。

以下是 UIView 的扩展,它具有一个名为 screenshot 的计算属性,它将为您提供所需的图像:-

extension UIView {
    var screenshot : UIImage? {
        var screenshot :UIImage?
        let scale = UIScreen.main.scale
        UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);
        guard let context = UIGraphicsGetCurrentContext() else {return nil}
        layer.render(in:context)
        screenshot = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return screenshot
    }
}

如何使用:-

@IBAction func SaveCanvas(_ sender: Any) {
   let drawing = canvas.screenshot
   //Now send this image to server
}
于 2019-03-05T20:56:45.460 回答