質問編集履歴

1

実際に書いたコードを追加しました。

2015/12/19 17:29

投稿

Stephen_J
Stephen_J

スコア18

test CHANGED
File without changes
test CHANGED
@@ -4,30 +4,170 @@
4
4
 
5
5
 
6
6
 
7
- しかし、事前に書いていた、ImageViewをシングルタップした時に
7
+ しかし、ImageViewをシングルタップした時にタップしたポイントを取得する部分のコードがうまく動かなくなってしまいました。
8
8
 
9
- 動作するはず機能が、ScrollView内とその外を二本指でタップした場合にしか
9
+ (以下コードのprint(pointX)及びprint(pointY)が出力されません。)
10
10
 
11
- 動作しなくなってしまいました
11
+ 以下がViewController.swiftファイルの内容です
12
12
 
13
13
 
14
14
 
15
- 色々と調べてみたところ、UIScrollViewを用いた際に
15
+ ```ViewController.swift
16
16
 
17
- UIPinchGestureRecognizerが優先され(?)、
17
+ import UIKit
18
18
 
19
- それが原因でシングルタップ・ダブルタップが
20
19
 
20
+
21
+ class ViewController: UIViewController,UIScrollViewDelegate {
22
+
23
+ @IBOutlet weak var myScrollView: UIScrollView!
24
+
25
+ @IBOutlet weak var myImageView: UIImageView!
26
+
27
+
28
+
29
+ override func viewDidLoad() {
30
+
31
+ super.viewDidLoad()
32
+
33
+
34
+
35
+ // スクロールビューの設定
36
+
37
+ self.myScrollView.delegate = self
38
+
39
+ self.myScrollView.minimumZoomScale = 1
40
+
41
+ self.myScrollView.maximumZoomScale = 8
42
+
43
+ self.myScrollView.scrollEnabled = true
44
+
45
+ self.myScrollView.showsHorizontalScrollIndicator = true
46
+
47
+ self.myScrollView.showsVerticalScrollIndicator = true
48
+
49
+
50
+
51
+ var doubleTapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action:"doubleTap:")
52
+
53
+ doubleTapGesture.numberOfTapsRequired = 2
54
+
55
+ self.myImageView.userInteractionEnabled = true
56
+
57
+ self.myImageView.addGestureRecognizer(doubleTapGesture)
58
+
59
+ }
60
+
61
+
62
+
63
+ override func didReceiveMemoryWarning() {
64
+
65
+ super.didReceiveMemoryWarning()
66
+
67
+ // Dispose of any resources that can be recreated.
68
+
69
+ }
70
+
71
+
72
+
73
+ // ピンチイン・ピンチアウト
74
+
75
+ func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
76
+
77
+ print("pinch")
78
+
79
+ return self.myImageView
80
+
81
+ }
82
+
83
+
84
+
85
+ // ダブルタップ
86
+
87
+ func doubleTap(gesture: UITapGestureRecognizer) -> Void {
88
+
89
+
90
+
91
+ print(self.myScrollView.zoomScale)
92
+
93
+ if ( self.myScrollView.zoomScale < self.myScrollView.maximumZoomScale ) {
94
+
95
+ var newScale:CGFloat = self.myScrollView.zoomScale * 3
96
+
97
+ var zoomRect:CGRect = self.zoomRectForScale(newScale, center: gesture.locationInView(gesture.view))
98
+
99
+ self.myScrollView.zoomToRect(zoomRect, animated: true)
100
+
101
+ } else {
102
+
103
+ self.myScrollView.setZoomScale(1.0, animated: true)
104
+
105
+ }
106
+
107
+ }
108
+
109
+
110
+
111
+ // 領域
112
+
113
+ func zoomRectForScale(scale:CGFloat, center: CGPoint) -> CGRect{
114
+
115
+ var zoomRect: CGRect = CGRect()
116
+
117
+ zoomRect.size.height = self.myScrollView.frame.size.height / scale
118
+
119
+ zoomRect.size.width = self.myScrollView.frame.size.width / scale
120
+
121
+
122
+
123
+ zoomRect.origin.x = center.x - zoomRect.size.width / 2.0
124
+
125
+ zoomRect.origin.y = center.y - zoomRect.size.height / 2.0
126
+
127
+
128
+
129
+ return zoomRect
130
+
131
+ }
132
+
133
+
134
+
135
+ override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
136
+
137
+ for touch: AnyObject in touches {
138
+
139
+ let point = touch.locationInView(self.view)
140
+
141
+
142
+
143
+ let pointX = point.x
144
+
145
+ let pointY = point.y
146
+
147
+
148
+
149
+ print(pointX)
150
+
151
+ print(pointY)
152
+
153
+ }
154
+
155
+ }
156
+
157
+ }
158
+
159
+ ```
160
+
161
+
162
+
163
+ 色々と調べてみたところ、UIScrollViewを用いた際にUIPinchGestureRecognizerが優先され(?)、
164
+
21
- 認識できなくなるのではないかと思ったのですが、
165
+ それが原因でシングルタップ・ダブルタップが認識できなくなるのではないかと思ったのですが、
22
166
 
23
167
  どのように処理すべきでしょうか?
24
168
 
25
169
 
26
170
 
27
- なお、[前回の質問時に教えていただいた方法](http://qiita.com/hanoopy/items/7a2c582cd9758e7a3076)のダブルタップで3倍に拡大・・・という部分も
28
-
29
- 動作しません。こちらについてもどうすれば良いか回答していただけると幸いです。
30
-
31
171
 
32
172
 
33
173
  Xcode7.2、Swift2.1、Storyboardを使用しています。