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

質問編集履歴

4

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

2017/06/07 03:15

投稿

harima
harima

スコア17

title CHANGED
File without changes
body CHANGED
@@ -19,4 +19,156 @@
19
19
  let maxWidth: CGFloat = self.view.bounds.width
20
20
  let maxHeight: CGFloat = self.view.bounds.height
21
21
  ```
22
- letで定義している定数の追加
22
+ letで定義している定数の追加
23
+
24
+
25
+ ある程度回転ができるようになったのですが、長方形のまま回転しているため、表示がおかしくなっています。改善点・修正点などございましたら、ご教授ください。
26
+ ```swift3
27
+ //
28
+ // ViewController.swift
29
+ // Map
30
+ //
31
+
32
+ import UIKit
33
+ import MapKit
34
+ import CoreLocation
35
+
36
+ class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
37
+
38
+ var myMapView: MKMapView!
39
+ var coordinate: CLLocationCoordinate2D!
40
+ var locationManager: CLLocationManager!
41
+
42
+ var myLatitudeDelta = 1.0
43
+ var myLongitudeDelta = 1.0
44
+
45
+ var myDegree = 0.0
46
+
47
+ let DBL_MAX = 1.7976931348623157E+308
48
+ let DBL_MIN = 50.0 //4.9E-324
49
+
50
+ private var rotateBtn: UIButton!
51
+
52
+ override func viewDidLoad() {
53
+ super.viewDidLoad()
54
+ // Do any additional setup after loading the view, typically from a nib
55
+ setupLocationManager()
56
+
57
+ let maxWidth: CGFloat = self.view.bounds.width
58
+ let maxHeight: CGFloat = self.view.bounds.height
59
+
60
+ // locationManager = CLLocationManager()
61
+
62
+ myMapView = MKMapView()
63
+ 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))
64
+ myMapView.delegate = self
65
+ myMapView.setCenter(myMapView.userLocation.coordinate, animated: true)
66
+ myMapView.setUserTrackingMode(.followWithHeading, animated: true)
67
+ myMapView.showsUserLocation = true
68
+ self.view.addSubview(myMapView)
69
+
70
+
71
+ rotateBtn = UIButton()
72
+ rotateBtn.frame = CGRect(x: maxWidth / 4.0 * 3.0, y: maxHeight - 50.0, width: maxWidth / 4.0, height: 50.0)
73
+ rotateBtn.setTitleColor(UIColor.black, for: .normal)
74
+ rotateBtn.backgroundColor = UIColor.yellow
75
+ rotateBtn.layer.cornerRadius = 20.0
76
+ rotateBtn.setTitle("回転", for: .normal)
77
+ rotateBtn.tag = 4
78
+ rotateBtn.addTarget(self, action: #selector(ViewController.onClickMyButton(sender:)), for: .touchDown)
79
+ self.view.addSubview(rotateBtn)
80
+
81
+
82
+ }
83
+
84
+ func setupLocationManager() {
85
+ locationManager = CLLocationManager()
86
+ guard let locationManager = locationManager else { return }
87
+
88
+ locationManager.requestWhenInUseAuthorization()
89
+ }
90
+
91
+ func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
92
+ // print("regionDidChangeAnimated")
93
+ }
94
+
95
+ func onClickMyButton(sender: UIButton) {
96
+
97
+ if (sender.tag == 1) {
98
+ } else if (sender.tag == 2){
99
+ } else if (sender.tag == 3){
100
+ } else if (sender.tag == 4){
101
+
102
+ myDegree = myDegree + 15.0
103
+ let scaleTransform = CGAffineTransform(scaleX: 1.0, y: 1.0)
104
+ let rotationTransform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi / 180.0 * myDegree))
105
+ let transform = scaleTransform.concatenating(rotationTransform)
106
+ myMapView.transform = transform
107
+
108
+ }
109
+
110
+ }
111
+
112
+
113
+ override func didReceiveMemoryWarning() {
114
+ super.didReceiveMemoryWarning()
115
+ // Dispose of any resources that can be recreated.
116
+ }
117
+
118
+
119
+ override var prefersStatusBarHidden: Bool {
120
+ return false
121
+ }
122
+
123
+ override func viewWillTransition(to size: CGSize,
124
+ with coordinator: UIViewControllerTransitionCoordinator) {
125
+ super.viewWillTransition(to: size, with: coordinator)
126
+
127
+
128
+ }
129
+ }
130
+
131
+
132
+
133
+ extension ViewController {
134
+
135
+ func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
136
+ switch status {
137
+ case .notDetermined:
138
+ print("ユーザーはこのアプリケーションに関してまだ選択を行っていません")
139
+ // 許可を求めるコードを記述する(後述)
140
+ locationManager.requestWhenInUseAuthorization()
141
+ break
142
+
143
+ case .denied:
144
+ print("ローケーションサービスの設定が「無効」になっています (ユーザーによって、明示的に拒否されています)")
145
+ // 「設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい」を表示する
146
+ let alert = UIAlertController(title: "ローケーションサービスの設定が「無効」になっています。", message: "「設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい」", preferredStyle: .alert)
147
+ alert.addAction(UIAlertAction(title: "OK", style: .default))
148
+ self.present(alert, animated: true, completion: nil)
149
+ break
150
+
151
+ case .restricted:
152
+ print("このアプリケーションは位置情報サービスを使用できません(ユーザによって拒否されたわけではありません)")
153
+ // 「このアプリは、位置情報を取得できないために、正常に動作できません」を表示する
154
+ let alert = UIAlertController(title: "このアプリケーションは位置情報サービスを使用できません(ユーザによって拒否されたわけではありません)", message: "「このアプリは、位置情報を取得できないために、正常に動作できません」", preferredStyle: .alert)
155
+ alert.addAction(UIAlertAction(title: "OK", style: .default))
156
+ self.present(alert, animated: true, completion: nil)
157
+ break
158
+
159
+ case .authorizedAlways:
160
+ print("常時、位置情報の取得が許可されています。")
161
+ // 位置情報取得の開始処理
162
+ break
163
+ case .authorizedWhenInUse:
164
+ print("起動時のみ、位置情報の取得が許可されています。")
165
+ // 位置情報取得の開始処理
166
+ locationManager.startUpdatingLocation()
167
+ break
168
+ }
169
+ }
170
+
171
+ }
172
+
173
+
174
+ ```

3

ソースコードの追加

2017/06/07 03:15

投稿

harima
harima

スコア17

title CHANGED
File without changes
body CHANGED
@@ -13,4 +13,10 @@
13
13
  }
14
14
  ```
15
15
  大変失礼しております。マップの表示、拡大・縮小、ボタンでの動作はできています。マップの回転だけが分かりません。
16
- 上記のように回転をすると、長方形の画面が回転して、地図も縮小されたり、ボタンの上に乗っていたりして、地図を二本指で回転させた状態とは程遠い表示になってしまいます。申し訳有りませんが宜しくお願い致します。
16
+ 上記のように回転をすると、長方形の画面が回転して、地図も縮小されたり、ボタンの上に乗っていたりして、地図を二本指で回転させた状態とは程遠い表示になってしまいます。申し訳有りませんが宜しくお願い致します。
17
+
18
+ ```swift3
19
+ let maxWidth: CGFloat = self.view.bounds.width
20
+ let maxHeight: CGFloat = self.view.bounds.height
21
+ ```
22
+ letで定義している定数の追加

2

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

2017/06/05 05:24

投稿

harima
harima

スコア17

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

1

大変申し訳ありません

2017/06/05 05:22

投稿

harima
harima

スコア17

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