Я делаю приложения для рисования книг. И я сделал pencilKit
быстро. Так что в качестве изображения, которое я добавляю в этот вопрос.
Итак, я могу нарисовать несколько вещей на canvasView
. Но!!! Я действительно хочу делать снимки в фотопленке, поэтому я хочу использовать это в качестве фона моего canvasView
.
Но если canvasView.addSubview(ImageView)
находится в коде, то мой серый ImageView находится в верхней части моего canvasView поэтому, если я рисую что-то, то эти предметы рисуются под canvasView.
Если я использую imageView.sendSubviewToBack(canvasView)
, то ничего не происходит. Я действительно знал, как вставить фоновое изображение между RootView и canvasView.
Вот мое изображение и код.
о представлении иерархии
о том, как выглядит вид
//
// ViewController.swift
// webtoon
//
// Created by 신효근 on 2020/07/13.
// Copyright © 2020 신효근. All rights reserved.
//
import UIKit
import PencilKit
class ViewController: UIViewController, PKCanvasViewDelegate, PKToolPickerObserver {
@IBOutlet weak var canvasView: PKCanvasView!
let canvasWidth : CGFloat = 768
let canvasOverscrollHight : CGFloat = 500
var imageView = UIImageView()
var drawing = PKDrawing()
let picker = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
canvasView.delegate = self
canvasView.drawing = drawing
canvasView.alwaysBounceVertical = true
canvasView.allowsFingerDrawing = true
if let window = parent?.view.window,
let toolPicker = PKToolPicker.shared(for: window){
toolPicker.setVisible(true, forFirstResponder:canvasView)
toolPicker.addObserver(canvasView)
canvasView.becomeFirstResponder()
}
self.imageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 500)
self.imageView.backgroundColor = .gray
imageView.sendSubviewToBack(canvasView)
}
// override func viewDidLayoutSubviews() {
// let canvasScale = canvasView.bounds.width/canvasWidth
// canvasView.minimumZoomScale = canvasScale
// canvasView.maximumZoomScale = canvasScale
// canvasView.zoomScale = canvasScale
// }
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
@IBAction func saveDrawingToCameraRoll(_ sender: Any) {
}
@IBAction func addButtonPressed(_ sender: Any) {
self.present(self.picker, animated: true)
}
}
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
private func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
var newImage: UIImage? = nil
print("Start")
print(info)
print("end")
if let possibleImage = info["UIImagePickerControllerEditedImage"] as? UIImage { // 수정된 이미지가 있을 경우
newImage = possibleImage
} else if let possibleImage = info["UIImagePickerControllerOriginalImage"] as? UIImage { // 오리지널 이미지가 있을 경우
newImage = possibleImage
}
imageView.image = newImage // 받아온 이미지를 이미지 뷰에 넣어준다.
picker.dismiss(animated: true) // 그리고 picker를 닫아준다.
}
}