回答編集履歴
1
複数のPDFのコードを追記しました。
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
|
+
|