質問編集履歴

4

回転のソースコード追加。長方形のまま回転するのでおかしく見える。

2017/06/07 03:15

投稿

harima
harima

スコア17

test CHANGED
File without changes
test CHANGED
@@ -41,3 +41,307 @@
41
41
  ```
42
42
 
43
43
  letで定義している定数の追加
44
+
45
+
46
+
47
+
48
+
49
+ ある程度回転ができるようになったのですが、長方形のまま回転しているため、表示がおかしくなっています。改善点・修正点などございましたら、ご教授ください。
50
+
51
+ ```swift3
52
+
53
+ //
54
+
55
+ // ViewController.swift
56
+
57
+ // Map
58
+
59
+ //
60
+
61
+
62
+
63
+ import UIKit
64
+
65
+ import MapKit
66
+
67
+ import CoreLocation
68
+
69
+
70
+
71
+ class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
72
+
73
+
74
+
75
+ var myMapView: MKMapView!
76
+
77
+ var coordinate: CLLocationCoordinate2D!
78
+
79
+ var locationManager: CLLocationManager!
80
+
81
+
82
+
83
+ var myLatitudeDelta = 1.0
84
+
85
+ var myLongitudeDelta = 1.0
86
+
87
+
88
+
89
+ var myDegree = 0.0
90
+
91
+
92
+
93
+ let DBL_MAX = 1.7976931348623157E+308
94
+
95
+ let DBL_MIN = 50.0 //4.9E-324
96
+
97
+
98
+
99
+ private var rotateBtn: UIButton!
100
+
101
+
102
+
103
+ override func viewDidLoad() {
104
+
105
+ super.viewDidLoad()
106
+
107
+ // Do any additional setup after loading the view, typically from a nib
108
+
109
+ setupLocationManager()
110
+
111
+
112
+
113
+ let maxWidth: CGFloat = self.view.bounds.width
114
+
115
+ let maxHeight: CGFloat = self.view.bounds.height
116
+
117
+
118
+
119
+ // locationManager = CLLocationManager()
120
+
121
+
122
+
123
+ myMapView = MKMapView()
124
+
125
+ myMapView.frame = self.view.frame(forAlignmentRect: CGRect(x: 0.0, y: 20.0 + 50.0, width: maxWidth, height: maxHeight - 20.0 - 50.0 - 50.0))
126
+
127
+ myMapView.delegate = self
128
+
129
+ myMapView.setCenter(myMapView.userLocation.coordinate, animated: true)
130
+
131
+ myMapView.setUserTrackingMode(.followWithHeading, animated: true)
132
+
133
+ myMapView.showsUserLocation = true
134
+
135
+ self.view.addSubview(myMapView)
136
+
137
+
138
+
139
+
140
+
141
+ rotateBtn = UIButton()
142
+
143
+ rotateBtn.frame = CGRect(x: maxWidth / 4.0 * 3.0, y: maxHeight - 50.0, width: maxWidth / 4.0, height: 50.0)
144
+
145
+ rotateBtn.setTitleColor(UIColor.black, for: .normal)
146
+
147
+ rotateBtn.backgroundColor = UIColor.yellow
148
+
149
+ rotateBtn.layer.cornerRadius = 20.0
150
+
151
+ rotateBtn.setTitle("回転", for: .normal)
152
+
153
+ rotateBtn.tag = 4
154
+
155
+ rotateBtn.addTarget(self, action: #selector(ViewController.onClickMyButton(sender:)), for: .touchDown)
156
+
157
+ self.view.addSubview(rotateBtn)
158
+
159
+
160
+
161
+
162
+
163
+ }
164
+
165
+
166
+
167
+ func setupLocationManager() {
168
+
169
+ locationManager = CLLocationManager()
170
+
171
+ guard let locationManager = locationManager else { return }
172
+
173
+
174
+
175
+ locationManager.requestWhenInUseAuthorization()
176
+
177
+ }
178
+
179
+
180
+
181
+ func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
182
+
183
+ // print("regionDidChangeAnimated")
184
+
185
+ }
186
+
187
+
188
+
189
+ func onClickMyButton(sender: UIButton) {
190
+
191
+
192
+
193
+ if (sender.tag == 1) {
194
+
195
+ } else if (sender.tag == 2){
196
+
197
+ } else if (sender.tag == 3){
198
+
199
+ } else if (sender.tag == 4){
200
+
201
+
202
+
203
+ myDegree = myDegree + 15.0
204
+
205
+ let scaleTransform = CGAffineTransform(scaleX: 1.0, y: 1.0)
206
+
207
+ let rotationTransform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi / 180.0 * myDegree))
208
+
209
+ let transform = scaleTransform.concatenating(rotationTransform)
210
+
211
+ myMapView.transform = transform
212
+
213
+
214
+
215
+ }
216
+
217
+
218
+
219
+ }
220
+
221
+
222
+
223
+
224
+
225
+ override func didReceiveMemoryWarning() {
226
+
227
+ super.didReceiveMemoryWarning()
228
+
229
+ // Dispose of any resources that can be recreated.
230
+
231
+ }
232
+
233
+
234
+
235
+
236
+
237
+ override var prefersStatusBarHidden: Bool {
238
+
239
+ return false
240
+
241
+ }
242
+
243
+
244
+
245
+ override func viewWillTransition(to size: CGSize,
246
+
247
+ with coordinator: UIViewControllerTransitionCoordinator) {
248
+
249
+ super.viewWillTransition(to: size, with: coordinator)
250
+
251
+
252
+
253
+
254
+
255
+ }
256
+
257
+ }
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+ extension ViewController {
266
+
267
+
268
+
269
+ func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
270
+
271
+ switch status {
272
+
273
+ case .notDetermined:
274
+
275
+ print("ユーザーはこのアプリケーションに関してまだ選択を行っていません")
276
+
277
+ // 許可を求めるコードを記述する(後述)
278
+
279
+ locationManager.requestWhenInUseAuthorization()
280
+
281
+ break
282
+
283
+
284
+
285
+ case .denied:
286
+
287
+ print("ローケーションサービスの設定が「無効」になっています (ユーザーによって、明示的に拒否されています)")
288
+
289
+ // 「設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい」を表示する
290
+
291
+ let alert = UIAlertController(title: "ローケーションサービスの設定が「無効」になっています。", message: "「設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい」", preferredStyle: .alert)
292
+
293
+ alert.addAction(UIAlertAction(title: "OK", style: .default))
294
+
295
+ self.present(alert, animated: true, completion: nil)
296
+
297
+ break
298
+
299
+
300
+
301
+ case .restricted:
302
+
303
+ print("このアプリケーションは位置情報サービスを使用できません(ユーザによって拒否されたわけではありません)")
304
+
305
+ // 「このアプリは、位置情報を取得できないために、正常に動作できません」を表示する
306
+
307
+ let alert = UIAlertController(title: "このアプリケーションは位置情報サービスを使用できません(ユーザによって拒否されたわけではありません)", message: "「このアプリは、位置情報を取得できないために、正常に動作できません」", preferredStyle: .alert)
308
+
309
+ alert.addAction(UIAlertAction(title: "OK", style: .default))
310
+
311
+ self.present(alert, animated: true, completion: nil)
312
+
313
+ break
314
+
315
+
316
+
317
+ case .authorizedAlways:
318
+
319
+ print("常時、位置情報の取得が許可されています。")
320
+
321
+ // 位置情報取得の開始処理
322
+
323
+ break
324
+
325
+ case .authorizedWhenInUse:
326
+
327
+ print("起動時のみ、位置情報の取得が許可されています。")
328
+
329
+ // 位置情報取得の開始処理
330
+
331
+ locationManager.startUpdatingLocation()
332
+
333
+ break
334
+
335
+ }
336
+
337
+ }
338
+
339
+
340
+
341
+ }
342
+
343
+
344
+
345
+
346
+
347
+ ```

3

ソースコードの追加

2017/06/07 03:15

投稿

harima
harima

スコア17

test CHANGED
File without changes
test CHANGED
@@ -29,3 +29,15 @@
29
29
  大変失礼しております。マップの表示、拡大・縮小、ボタンでの動作はできています。マップの回転だけが分かりません。
30
30
 
31
31
  上記のように回転をすると、長方形の画面が回転して、地図も縮小されたり、ボタンの上に乗っていたりして、地図を二本指で回転させた状態とは程遠い表示になってしまいます。申し訳有りませんが宜しくお願い致します。
32
+
33
+
34
+
35
+ ```swift3
36
+
37
+ let maxWidth: CGFloat = self.view.bounds.width
38
+
39
+ let maxHeight: CGFloat = self.view.bounds.height
40
+
41
+ ```
42
+
43
+ letで定義している定数の追加

2

試してみたコードの追加、できていることの記載

2017/06/05 05:24

投稿

harima
harima

スコア17

test CHANGED
File without changes
test CHANGED
@@ -3,3 +3,29 @@
3
3
 
4
4
 
5
5
  確かに質問は丸投げになってしまって、気分を害された方には申し訳有りません。ですが、実際は2〜3時間、検索して色々試してみてどれもうまくいかなかった背景があります。大変失礼ですが、この方法が、一番分かりやすいと思って、ソースも付けずに質問をさせていただきました。申し訳有りません。
6
+
7
+
8
+
9
+ ```swift3
10
+
11
+ if(rotation == ROTATION_RIGHT ) {
12
+
13
+ var myRotateView: MKMapView = MKMapView(frame: CGRect(x: 0, y: 70, width: maxWidth, height: maxHeight - 20.0 - 50.0))
14
+
15
+ let angle:CGFloat = CGFloat((30.0 * M_PI) / 180.0)
16
+
17
+ myRotateView.transform = CGAffineTransform(rotationAngle: angle)
18
+
19
+ self.view.addSubview(myRotateView)
20
+
21
+ } else if (rotation == ROTATION_LEFT){
22
+
23
+
24
+
25
+ }
26
+
27
+ ```
28
+
29
+ 大変失礼しております。マップの表示、拡大・縮小、ボタンでの動作はできています。マップの回転だけが分かりません。
30
+
31
+ 上記のように回転をすると、長方形の画面が回転して、地図も縮小されたり、ボタンの上に乗っていたりして、地図を二本指で回転させた状態とは程遠い表示になってしまいます。申し訳有りませんが宜しくお願い致します。

1

大変申し訳ありません

2017/06/05 05:22

投稿

harima
harima

スコア17

test CHANGED
File without changes
test CHANGED
@@ -1 +1,5 @@
1
1
  MKMapViewでマップアプリを作っております。手に障がいを持つ方のためにボタンでマップを30度くらいずつ回転させたいのですが、どのように記述すれば良いか分かりません。どなたかお分かりの方はご教授お願いいたします。
2
+
3
+
4
+
5
+ 確かに質問は丸投げになってしまって、気分を害された方には申し訳有りません。ですが、実際は2〜3時間、検索して色々試してみてどれもうまくいかなかった背景があります。大変失礼ですが、この方法が、一番分かりやすいと思って、ソースも付けずに質問をさせていただきました。申し訳有りません。