PaperKit:描画エリアのバウンス(スクロール)を止める
PaperKitの描画エリアを、画面サイズと同じ、拡大縮小なし(デフォルトはない)に設定しても、
バウンス(スクロール)して動く。
これを止めたい。
動き的に、構成するviewの中にUIScrollViewがいると思われる。
PaperMarkupViewControllerのviewの構成を出力して確認。
UIView tree
CanvasView<Paper> - frame: (0.0, 0.0, 1376.0, 1032.0)
UIScrollView - frame: (0.0, 0.0, 1376.0, 1032.0)
CanvasElementContainerView - frame: (0.0, 0.0, 1376.0, 1032.0)
PaperView - frame: (0.0, 0.0, 1376.0, 1032.0)
UIView - frame: (0.0, 0.0, 1376.0, 1032.0)
CanvasElementDrawingView - frame: (0.0, 0.0, 1376.0, 1032.0)
UIView - frame: (0.0, 0.0, 1376.0, 1032.0)
PKTiledCanvasView - frame: (0.0, 0.0, 1376.0, 1032.0)
PKTiledView - frame: (0.0, 0.0, 1376.0, 1032.0)
PKSelectionGestureView - frame: (0.0, 0.0, 1376.0, 1032.0)
PKTiledGestureView - frame: (0.0, 0.0, 1376.0, 1032.0)
CanvasCollaborationStateView - frame: (0.0, 0.0, 1376.0, 1032.0)
CanvasElementResizeView - frame: (0.0, 0.0, 1376.0, 1032.0)
UIView - frame: (0.0, 0.0, 1376.0, 1032.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
HandwritingReflowView - frame: (0.0, 0.0, 1376.0, 1032.0)
UIView - frame: (0.0, 0.0, 1376.0, 1032.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
CanvasElementResizeHandle - frame: (0.0, 0.0, 16.0, 16.0)
思った通り「UIScrollView – frame: (0.0, 0.0, 1376.0, 1032.0)」がいる。
となれば、UIScrollViewを封じていけば良い。
PaperMarkupViewControllerにスクロール制御のプロパティ等はないため、viewから構成を辿り制御する。
UIViewにextensionを用意する。
PaperMarkupViewController生成後に、メソッドをコールする。
生成時だけではなく、PaperMarkupViewControllerにPaperMarkupを再設定する場合は、再度コールが必要になるようだ。
paperViewController.view.disableScrollViewBounce()
extension UIView {
func disableScrollViewBounce() {
for subview in subviews {
if let scrollView = subview as? UIScrollView {
print("**** found scroll view, disabling bounce ****")
scrollView.bounces = false
scrollView.alwaysBounceVertical = false
scrollView.alwaysBounceHorizontal = false
scrollView.isScrollEnabled = false
}
// 再帰的に探索
subview.disableScrollViewBounce()
}
}
}





