swift - 如何快速将背景图像添加到 canvasView(由 PencilKit 制作)中?
问题描述
我制作绘图书应用程序。我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를 닫아준다.
}
}
解决方案
这是我的代码,它对我有用
canvasView.isOpaque = false
canvasView.backgroundColor = UIColor.clear
canvasView.delegate = context.coordinator
canvasView.becomeFirstResponder()
let imageView = UIImageView(image: canvasImage)
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
let contentView = canvasView.subviews[0]
contentView.addSubview(imageView)
contentView.sendSubviewToBack(imageView)
推荐阅读
- java - 如何使用java从PDF文件中读取两个单词之间的多行内容?
- sql - 按关联存在排序记录
- angular - 可以从单元测试中看到方法内部定义的变量
- java - 执行任务时如何将变量写入gradle属性文件?
- awk - 在 AWK 中使用另一个文件查询一个文件的内容
- animation - 使用带有两个嵌套循环的 LaTeX animate & Tikz
- content-management-system - 如何在 sanity io 用户界面中更改字段样式?
- jquery - 删除vue js中表单字段的错误边框
- mysql - 如何在mysql中的一个查询中转换多个更新查询
- java - Java Regex:查找插入、删除、替换计数