回答編集履歴

1

複数のPDFのコードを追記しました。

2024/04/26 11:11

投稿

yametai
yametai

スコア29

test CHANGED
@@ -83,3 +83,52 @@
83
83
  >
84
84
  > [Interfacing with UIKit — SwiftUI Tutorials | Apple Developer Documentation](https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit)
85
85
 
86
+ ### 追記
87
+
88
+
89
+ > 今確認中に気がついたのですが、PDFが2枚以上の場合に書けなくなるようです。
90
+ > 追記したコードにより、初期設定のpenは書けるようになったものの,buttonは反映しなくなっていしまいました。
91
+
92
+ コメントありがとうございます。
93
+ 確かに、最初の回答のコードでは、私の環境でもPDF2枚で確認したら、1枚目はtoolの設定が反映されていないようでした。(1枚のPDFでしか確認していませんでした・・)
94
+ ページによってPKCanvasViewを用意しないといけないのですね。
95
+ 勉強になります。
96
+
97
+ これらを踏まえて、辞書で保持しているPKCanvasViewに対して全部toolを設定するように変更したら、想定通りになったように見えました。
98
+ *OverlayCoordinatorの部分だけコードを追記します
99
+
100
+ ```swift
101
+ class OverlayCoordinator : NSObject,PDFPageOverlayViewProvider {
102
+ var pageToViewMapping = [PDFPage: PKCanvasView]() //補足追加
103
+ // var canvasView: PKCanvasView = PKCanvasView() // ***削除
104
+
105
+ func pdfView(_ view: PDFView, overlayViewFor page: PDFPage) -> UIView? {
106
+ // 編集・追加↓
107
+ if let overlayView = pageToViewMapping[page] {
108
+ return overlayView
109
+ }
110
+
111
+ let canvasView = PKCanvasView()
112
+ canvasView.drawingPolicy = .anyInput
113
+ canvasView.tool = PKInkingTool(.pen, width: 20)
114
+ canvasView.backgroundColor = .clear
115
+ pageToViewMapping[page] = canvasView
116
+ return canvasView
117
+ // 編集・追加↑
118
+ }
119
+ func setPen() {
120
+ // canvasView.tool = PKInkingTool(.pen, width: 1) // ***削除
121
+ for i in pageToViewMapping { // ***追加
122
+ i.value.tool = PKInkingTool(.pen, width: 1) // ***追加
123
+ } // ***追加
124
+ }
125
+ func setEraser() {
126
+ // canvasView.tool = PKEraserTool(.bitmap) // ***削除
127
+ for i in pageToViewMapping { // ***追加
128
+ i.value.tool = PKEraserTool(.bitmap) // ***追加
129
+ } // ***追加
130
+ }
131
+
132
+ }
133
+ ```
134
+