iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
1
自我挑戰組

老蕭咖啡館,情境式學習基礎iOS Swift系列 第 13

[2019鐵人賽Day13]老蕭咖啡館-眼底星空,卻搞不清方向(內附 簡易南針(compass羅盤)實例)

唷,抬頭一看,今天星空真美啊(亦翔)
對啊,那我們現在的方位東西南北,角度幾度怎判斷啊
這個嗎...你把手機的指南針打開來看不就好了(亦翔)
對齁,但要是自己寫一個簡易的話,也可以嗎?
是可以啊,但有現成的幹嘛還要自己寫一個?(亦翔)
就當教學、學習一下嗎
好吧(亦翔)

(本故事純屬虛構,如有雷同實屬巧合)


Step1. 先建立一個新專案,名稱為「compass」
https://ithelp.ithome.com.tw/upload/images/20181028/20091333i61scTDwuU.png

Step2. 如圖建立出四個Label元件
https://ithelp.ithome.com.tw/upload/images/20181028/20091333VSUk27b1ek.png

Step3. 導入CoreLocation框架
https://ithelp.ithome.com.tw/upload/images/20181028/200913338bt86ft7rW.png

import CoreLocation //導入CoreLocation框架

Step4. 開啟「輔助設計模式」,class加入CLLocationManagerDelegate方法
https://ithelp.ithome.com.tw/upload/images/20181028/20091333lpWHWtV7ob.png

class ViewController: UIViewController, CLLocationManagerDelegate

Step5. 將兩個Label元件做連結,面向數值的Label取名為「PositionLabel」,角度數值的Label取名為「AngleLabel」
https://ithelp.ithome.com.tw/upload/images/20181028/20091333BU62r11Kep.png

https://ithelp.ithome.com.tw/upload/images/20181028/20091333gC0NP4znv0.png

Step6. 建立常數 locationManager
https://ithelp.ithome.com.tw/upload/images/20181028/20091333BuG8XiqAk1.png

//建立常數 locationManager
let locationManager = CLLocationManager()

Step7. viewDidLoad的部分,配置 locationManager
https://ithelp.ithome.com.tw/upload/images/20181028/200913330WUiXJ7Ij8.png

//配置 locationManager
locationManager.delegate = self
locationManager.startUpdatingHeading() //取得當前設備的方向

Step8. 加入執行方法的Function

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    //判斷magneticHeading的精準度
    if newHeading.headingAccuracy < 0 {
        AngleLabel.text = "請進行校正"
        PositionLabel.text = "請進行校正"
    } else {
        //取得角度值(正北0、正東90、正南180、正西270)
        let angleValue:Double = newHeading.magneticHeading

        AngleLabel.text = String(format: "%.5f", angleValue)

        var positionValue:String = "" //方位值
        if(angleValue >= 0 && angleValue < 90){
            positionValue = "北"
        }else if(angleValue >= 90 && angleValue < 180){
            positionValue = "東"
        }else if(angleValue >= 180 && angleValue < 270){
            positionValue = "南"
        }else if(angleValue >= 270 && angleValue < 360){
            positionValue = "西"
        }

        PositionLabel.text = positionValue
    }
}

Step9. 編譯執行到手機上做測試,Finish


完整程式碼:

import UIKit
import CoreLocation //導入CoreLocation框架

//加入CLLocationManagerDelegate方法
class ViewController: UIViewController, CLLocationManagerDelegate {
    
    @IBOutlet weak var PositionLabel: UILabel!
    @IBOutlet weak var AngleLabel: UILabel!

    //建立常數 locationManager
    let locationManager = CLLocationManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //配置 locationManager
        locationManager.delegate = self
        locationManager.startUpdatingHeading() //取得當前設備的方向
    }
    
    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
        //判斷magneticHeading的精準度
        if newHeading.headingAccuracy < 0 {
            AngleLabel.text = "請進行校正"
            PositionLabel.text = "請進行校正"
        } else {
            //取得角度值(正北0、正東90、正南180、正西270)
            let angleValue:Double = newHeading.magneticHeading
            
            AngleLabel.text = String(format: "%.5f", angleValue)
            
            var positionValue:String = "" //方位值
            if(angleValue >= 0 && angleValue < 90){
                positionValue = "北"
            }else if(angleValue >= 90 && angleValue < 180){
                positionValue = "東"
            }else if(angleValue >= 180 && angleValue < 270){
                positionValue = "南"
            }else if(angleValue >= 270 && angleValue < 360){
                positionValue = "西"
            }
            
            PositionLabel.text = positionValue
        }
    }
}

上一篇
[2019鐵人賽Day12]老蕭咖啡館-Light Painting 光影塗鴉的工具(手電筒 Flashlight)
下一篇
[2019鐵人賽Day14]老蕭咖啡館-簡易說明Info.plist屬性
系列文
老蕭咖啡館,情境式學習基礎iOS Swift30

尚未有邦友留言

立即登入留言