teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

sample code

2019/09/18 01:00

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -13,4 +13,60 @@
13
13
  バグレポートとして報告もされているもよう。
14
14
  [Crash when loading PDFDocument into PDFView](http://www.openradar.me/49780971)
15
15
 
16
- とりあえず回避策として、上で載せたようにviewDidLayoutSubviewsに初回の一回だけ実行されるようなコードにしてPDFView周りの初期化するのが良いのではないかと思います。
16
+ とりあえず回避策として、上で載せたようにviewDidLayoutSubviewsに初回の一回だけ実行されるようなコードにしてPDFView周りの初期化するのが良いのではないかと思います。
17
+
18
+ 実装例:
19
+ ```swift
20
+ import UIKit
21
+ import PDFKit
22
+
23
+ class ViewController: UIViewController {
24
+
25
+ @IBOutlet weak var pdfView: PDFView!
26
+ @IBOutlet weak var pdfThumbnailView: PDFThumbnailView!
27
+
28
+ private var isPDFInitialized = false
29
+
30
+ var pdfURL: URL? {
31
+ return Bundle.main.url(forResource: "pdfSample", withExtension: "pdf")
32
+ }
33
+
34
+ override func viewDidLoad() {
35
+ super.viewDidLoad()
36
+ }
37
+
38
+ override func viewDidLayoutSubviews() {
39
+ super.viewDidLayoutSubviews()
40
+
41
+ if !isPDFInitialized {
42
+ isPDFInitialized = true
43
+ showPDF()
44
+ }
45
+ }
46
+
47
+ private func showPDF() {
48
+ guard let url = pdfURL else {
49
+ print("error")
50
+ return
51
+ }
52
+
53
+ let pdfDocument = PDFDocument(url: url)
54
+
55
+ //画面サイズに収まるように表示
56
+ pdfView.autoScales = true
57
+ // 単一ページのみ表示
58
+ pdfView.displayMode = .singlePage
59
+ //スクロール方向を水平方向へ
60
+ pdfView.displayDirection = .horizontal
61
+ //余白を入れる
62
+ pdfView.displaysPageBreaks = true
63
+ pdfView.pageBreakMargins = UIEdgeInsets(top: 10.0, left: 20.0, bottom: 10.0, right: 20.0)
64
+
65
+ //上で取得したpdfDocumentをdocumentに設定し、表示させる
66
+ pdfView.document = pdfDocument
67
+
68
+ pdfThumbnailView.layoutMode = .horizontal
69
+ pdfThumbnailView.pdfView = pdfView
70
+ }
71
+ }
72
+ ```

1

open radar

2019/09/18 01:00

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -1,9 +1,16 @@
1
1
  ググった感じではXcode10.2で挙動が変わってviewDidLoadでいろいろPDFViewを使おうとすると駄目みたいです。
2
2
 
3
- https://stackoverflow.com/questions/55362754/theres-problem-with-pdfkit-appeared-after-update-to-xcode-10-2-is-there-any-wa
3
+ [There's problem with PDFKit appeared after update to Xcode 10.2. Is there any way to solve?](https://stackoverflow.com/questions/55362754/theres-problem-with-pdfkit-appeared-after-update-to-xcode-10-2-is-there-any-wa)
4
4
 
5
5
  以下google翻訳
6
6
 
7
7
  > おそらくviewDidLoadが早すぎることを示唆しています(推測するだけです)。ビューはまだビュー階層にないため、実行されない可能性があります。このエラーは、レイヤーに位置がないと文句を言いますが、スーパーレイヤーがないため、これは理にかなっています。
8
8
  >
9
- すべてのコードをviewDidAppearに移動して、問題があるかどうかを確認してください。クラッシュがなくなると、私たちは正しい軌道に乗っています。必要に応じて、より良いイベントに移動して実験することができます。 viewDidLayoutSubviewsが推奨されます。コードを複数回実行しないでください(Boolインスタンスプロパティをフラグとして使用してください)。
9
+ すべてのコードをviewDidAppearに移動して、問題があるかどうかを確認してください。クラッシュがなくなると、私たちは正しい軌道に乗っています。必要に応じて、より良いイベントに移動して実験することができます。 viewDidLayoutSubviewsが推奨されます。コードを複数回実行しないでください(Boolインスタンスプロパティをフラグとして使用してください)。
10
+
11
+ ----
12
+
13
+ バグレポートとして報告もされているもよう。
14
+ [Crash when loading PDFDocument into PDFView](http://www.openradar.me/49780971)
15
+
16
+ とりあえず回避策として、上で載せたようにviewDidLayoutSubviewsに初回の一回だけ実行されるようなコードにしてPDFView周りの初期化するのが良いのではないかと思います。