【swift】コンパスを作る2(円状にオブジェクトを移動させる)

どうもこんにちは。iOSをメインに開発しているロッキーカナイです。

先日、【swift】コンパスを作るの記事を書きました。ざっくりとおさらいすると、CLLocationManagerを用いて、端末の現在向いている方位(角度)を取得し、Viewを北の角度なるように回転させるものになります。

今回は、円状に北のラベルを移動させるということをやってみたいと思います。

円状というのがポイントです!
アニメーションで、何秒間で円状にViewを移動させるとかは簡単にできるのですが、角度や計算に応じてプログラムで制御する方法の記事って全くといっていいぐらい無かったので、やってみた次第です。

 

はじめに

やりたいこと

  1. 方位の取得する
  2. 画面内に円を描画する
  3. その線上の方角位置に「北」ラベルを移動させる。

以上

 

どうにするか

1.方位の取得

これは先日の記事、【swift】コンパスを作るでやったので、そのまま利用します。

 

2.画面内に円を描画する

UIBezierPathを使って描画します。

 

3.円状の方位位置に「北」ラベルを移動させる。

方位から円状の位置を算出する計算が必要で、三角関数を用いる。

円の中心を基準点として、そこから三角関数で算出したxとyの位置を足し引きすることで位置が計算できそう。

 

 

コード

1.方位の取得

これで方位の取得が可能です。

 

2.画面内に円を描画する

 

画面中央に円を描画できました。

 

3.円状の方位位置に「北」ラベルを移動させる。

 

円状位置の計算について簡単に解説すると、円の中心点を基準にして、現在の方位に応じ、xとyの計算をしてます。

方位が0~89度、180~269度では、xはsinθと半径の積、yはcosθと半径の積

90~179度、270~359度は、xはcosθと半径の積、yはsinθと半径の積

になります。

また、各方位に応じxとyを足し引きして位置を算出しております。あと、ラベルの中央位置を円状にしたかった為に、ラベルの幅/2と高さ/2を行っております。

 

確認

できました!

 

まとめ

今回は、円状に北のラベルを移動させるということをやってみました。

冒頭でも伝えましたが、円状の位置にオブジェクトを移動させる記事が見つからなかったのでまとめてみました。誰かのお役に立てれば幸いです。

ではー

投稿者プロフィール

ロッキーカナイ
ロッキーカナイ
iOSをメインに、SwiftやObjective-C言語の開発をしてます。趣味は猫と戯れる事、PHPを使ったサイト作成やAndroidの開発もしております。ちなみに名前のロッキーカナイはよく昼飯を食べる所w