@@ -30,20 +30,21 @@ struct ImageScrollView: UIViewRepresentable {
30
30
doubleTapGesture. numberOfTapsRequired = 2
31
31
scrollView. addGestureRecognizer ( doubleTapGesture)
32
32
33
- // Calculate initial zoom scale
34
33
let widthScale = UIScreen . main. bounds. width / image. size. width
35
34
let heightScale = UIScreen . main. bounds. height / image. size. height
36
35
let minScale = min ( widthScale, heightScale)
37
36
38
37
scrollView. minimumZoomScale = minScale
39
38
scrollView. maximumZoomScale = 5.0
40
39
41
- // Set content size to image size
42
40
scrollView. contentSize = image. size
43
41
44
- // Set initial zoom scale
45
42
scrollView. zoomScale = minScale
46
43
44
+ scrollView. decelerationRate = . fast
45
+ scrollView. showsHorizontalScrollIndicator = false
46
+ scrollView. showsVerticalScrollIndicator = false
47
+
47
48
return scrollView
48
49
}
49
50
@@ -65,39 +66,39 @@ struct ImageScrollView: UIViewRepresentable {
65
66
return imageView
66
67
}
67
68
68
- func updateZoomScaleForSize( _ size: CGSize ) {
69
- guard let imageView = imageView,
70
- let image = imageView. image,
71
- let scrollView = scrollView,
72
- size. width > 0 ,
73
- size. height > 0 ,
74
- image. size. width > 0 ,
75
- image. size. height > 0 else { return }
76
-
77
- let widthScale = size. width / image. size. width
78
- let heightScale = size. height / image. size. height
79
- let minScale = min ( widthScale, heightScale)
69
+ func updateZoomScaleForSize( _ size: CGSize ) {
70
+ guard let imageView = imageView,
71
+ let image = imageView. image,
72
+ let scrollView = scrollView,
73
+ size. width > 0 ,
74
+ size. height > 0 ,
75
+ image. size. width > 0 ,
76
+ image. size. height > 0 else { return }
77
+
78
+ let widthScale = size. width / image. size. width
79
+ let heightScale = size. height / image. size. height
80
+ let minScale = min ( widthScale, heightScale)
80
81
81
- scrollView. minimumZoomScale = minScale
82
- scrollView. maximumZoomScale = max ( minScale * 5 , 5.0 )
82
+ scrollView. minimumZoomScale = minScale
83
+ scrollView. maximumZoomScale = max ( minScale * 5 , 5.0 )
84
+ }
85
+
86
+ @objc func handleDoubleTap( _ gesture: UITapGestureRecognizer ) {
87
+ guard let scrollView = gesture. view as? UIScrollView else { return }
88
+
89
+ if scrollView. zoomScale > scrollView. minimumZoomScale {
90
+ scrollView. setZoomScale ( scrollView. minimumZoomScale, animated: true )
91
+ } else {
92
+ let point = gesture. location ( in: imageView)
93
+ let size = scrollView. bounds. size
94
+ let w = size. width / ( scrollView. maximumZoomScale / 5 )
95
+ let h = size. height / ( scrollView. maximumZoomScale / 5 )
96
+ let x = point. x - ( w / 2.0 )
97
+ let y = point. y - ( h / 2.0 )
98
+ let rect = CGRect ( x: x, y: y, width: w, height: h)
99
+ scrollView. zoom ( to: rect, animated: true )
100
+ }
83
101
}
84
-
85
- @objc func handleDoubleTap( _ gesture: UITapGestureRecognizer ) {
86
- guard let scrollView = gesture. view as? UIScrollView else { return }
87
-
88
- if scrollView. zoomScale > scrollView. minimumZoomScale {
89
- scrollView. setZoomScale ( scrollView. minimumZoomScale, animated: true )
90
- } else {
91
- let point = gesture. location ( in: imageView)
92
- let size = scrollView. bounds. size
93
- let w = size. width / ( scrollView. maximumZoomScale / 5 )
94
- let h = size. height / ( scrollView. maximumZoomScale / 5 )
95
- let x = point. x - ( w / 2.0 )
96
- let y = point. y - ( h / 2.0 )
97
- let rect = CGRect ( x: x, y: y, width: w, height: h)
98
- scrollView. zoom ( to: rect, animated: true )
99
- }
100
- }
101
102
102
103
func scrollViewDidZoom( _ scrollView: UIScrollView ) {
103
104
guard let imageView = imageView else { return }
0 commit comments