PaperKit(もちろんベータ版)をSwiftUIで試す3 背景を透過する

背景透過のために追加した部分

paperViewController.viewへの設定のみでは透過しませんでした。
paperViewController.contentViewがnilだと、白背景のCanvasで設定されるとのこと。

/// The content that markup happens on top of.
///
/// The content view is sized to the frame of the `markup`, and added below all the markup and drawing.
/// If this is `nil` then the markup happens on top of a blank white canvas.

let contentView = UIView(frame: .zero)
contentView.isOpaque = false
contentView.backgroundColor = .clear
paperViewController.contentView = contentView
paperViewController.view.backgroundColor = .clear
paperViewController.view.isOpaque = false

全体

import Foundation
import SwiftUI
import UIKit
import PaperKit
import PencilKit

struct PaperMarkupViewControllerRepresentable: UIViewControllerRepresentable {
    let viewSize: CGSize
    @Binding var pkToolPicker: PKToolPicker

    func makeUIViewController(context: Context) -> PaperMarkupViewController {
        let markupModel = PaperMarkup(bounds: CGRect(x: 0, y: 0, width: self.viewSize.width, height: self.self .viewSize.height))
        let paperViewController = PaperMarkupViewController(markup: markupModel, supportedFeatureSet: .latest)
        paperViewController.view.becomeFirstResponder()
        
        self.pkToolPicker.addObserver(paperViewController)
        paperViewController.pencilKitResponderState.activeToolPicker = self.pkToolPicker
        paperViewController.pencilKitResponderState.toolPickerVisibility = .visible
        paperViewController.addButtonAction(toolPicker: self.pkToolPicker)
        paperViewController.delegate = context.coordinator
        let contentView = UIView(frame: .zero)
        contentView.isOpaque = false
        contentView.backgroundColor = .clear
        paperViewController.contentView = contentView
        paperViewController.view.frame = .zero
        paperViewController.view.backgroundColor = .clear
        paperViewController.view.isOpaque = false
        return paperViewController
    }
    
    func updateUIViewController(_ paperMarkupViewController: PaperMarkupViewController, context: Context) {
    }
    
    class Coordinator: NSObject, PaperMarkupViewController.Delegate {
        let parent: PaperMarkupViewControllerRepresentable
        
        init(parent: PaperMarkupViewControllerRepresentable) {
            self.parent = parent
        }
        
        // PaperMarkupViewController.Delegate
        func paperMarkupViewControllerDidChangeMarkup(_ paperMarkupViewController: PaperMarkupViewController) {
            print("\(#function)")
        }
        
        func paperMarkupViewControllerDidChangeSelection(_ paperMarkupViewController: PaperMarkupViewController) {
            print("\(#function)")
        }
        
        func paperMarkupViewControllerDidBeginDrawing(_ paperMarkupViewController: PaperMarkupViewController) {
            print("\(#function)")
        }
        
        func paperMarkupViewControllerDidChangeContentVisibleFrame(_ paperMarkupViewController: PaperMarkupViewController) {
            print("\(#function)")
        }
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(parent: self)
    }
}

extension PaperMarkupViewController {
    func addButtonAction(toolPicker: PKToolPicker) {
        toolPicker.accessoryItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(plusButtonPressed(_:)))
    }
    
    @objc func plusButtonPressed(_ button: UIBarButtonItem) {
        let markupEditViewController = MarkupEditViewController(supportedFeatureSet: .latest)
        markupEditViewController.modalPresentationStyle = .popover
        markupEditViewController.popoverPresentationController?.barButtonItem = button
        markupEditViewController.delegate = self as? any MarkupEditViewController.Delegate
        self.present(markupEditViewController, animated: true)
    }    
}

SwiftSwift,SwiftUI

Posted by shi-n