【问题标题】:How can I add background image into canvasView(made by PencilKit) in swift?如何快速将背景图像添加到 canvasView(由 PencilKit 制作)?
【发布时间】:2020-07-13 13:26:46
【问题描述】:

我制作绘图书应用程序。我很快就制作了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를 닫아준다.
    }
}

【问题讨论】:

    标签: swift xcode canvas view hierarchy


    【解决方案1】:

    这是我的代码,它适用于我

        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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多