【iOS】7.4 定位服務->2.1.4 定位 - 官方框架CoreLocation 案例:指南針效果

来源:http://www.cnblogs.com/shorfng/archive/2017/03/24/6612031.html
-Advertisement-
Play Games

本文並非最終版本,如果想要關註更新或更正的內容請關註文集,聯繫方式詳見文末,如有疏忽和遺漏,歡迎指正。 本文相關目錄: ================== 所屬文集: "【iOS】07 設備工具 " ================== "7.4 定位服務 1.0 簡介" "7.4 定位服務 2. ...


本文並非最終版本,如果想要關註更新或更正的內容請關註文集,聯繫方式詳見文末,如有疏忽和遺漏,歡迎指正。


本文相關目錄:
================== 所屬文集:【iOS】07 設備工具 ==================
7.4 定位服務->1.0 簡介
7.4 定位服務->2.1.1 定位 - 官方框架CoreLocation: 請求用戶授權
7.4 定位服務->2.1.2 定位 - 官方框架CoreLocation: CLLocationManager位置管理器
7.4 定位服務->2.1.3.1 定位 - 官方框架CoreLocation 功能1:地理定位
7.4 定位服務->2.1.3.2 定位 - 官方框架CoreLocation 功能2:地理編碼和反地理編碼
7.4 定位服務->2.1.3.3 定位 - 官方框架CoreLocation 功能3:區域監聽
7.4 定位服務->2.1.4 定位 - 官方框架CoreLocation 案例:指南針效果
7.4 定位服務->2.2 定位 - locationManager框架
7.4 定位服務->3.1 地圖框架MapKit 功能1:地圖展示
7.4 定位服務->3.2 地圖框架MapKit 功能2:路線規劃(導航)
7.4 定位服務->3.3 地圖框架MapKit 功能3:3D視圖
7.4 定位服務->3.4 地圖框架MapKit 功能4:地圖截圖
7.4 定位服務->3.5 地圖框架MapKit 功能5:POI檢索
================== 所屬文集:【iOS】07 設備工具 ==================


定位目錄:

官方框架CoreLocation目錄:

本文目錄:


1.0 實現思路


2.0 概念補充


3.0 測試環境


代碼8:指南針效果 Demo

編譯環境:Xcode 8.0
模擬器版本:iOS 10
Swift版本:3.0

【OC 語言】

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic, strong) CLLocationManager *locationM;
@property (weak, nonatomic) IBOutlet UIImageView *compassView;
@end

@implementation ViewController

#pragma mark - 懶載入
-(CLLocationManager *)locationM
{
    if (!_locationM) {
        _locationM = [[CLLocationManager alloc] init];
        _locationM.delegate = self;
    }
    return _locationM;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 判斷"磁力計是否可用"
    if ([CLLocationManager headingAvailable]) {
        // 開始監聽設備朝向
        [self.locationM startUpdatingHeading];
    }
}

#pragma mark - CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
    
    // 1.判斷當前的角度是否有效(如果此值小於0,代表角度無效)
    if(newHeading.headingAccuracy < 0)
        return;
    
    NSLog(@"%f", newHeading.magneticHeading);

    // 2.獲取當前設備朝向(磁北方向)
    CGFloat angle = newHeading.magneticHeading;
    
    // 3.轉換成為弧度
    CGFloat radian = angle / 180.0 * M_PI;
    
    // 4.帶動畫反向旋轉指南針
    [UIView animateWithDuration:0.5 animations:^{
        self.compassView.transform = CGAffineTransformMakeRotation(-radian);
    }];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end
【Swift 語言】

import UIKit
import CoreLocation

class ViewController: UIViewController {
    
    @IBOutlet weak var compassView: UIImageView!
    
    // 1. 懶載入,創建位置管理者
    lazy var locationM: CLLocationManager = {
        
        let locationM = CLLocationManager()
        locationM.delegate = self
        
        return locationM
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 2. 判斷當前"磁力計"感測器是否可用
        if CLLocationManager.headingAvailable() {
            // 使用位置管理者, 獲取當前設備朝向
            locationM.startUpdatingHeading()
        }else {
            print("當前磁力計設備損壞")
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

// 代理協議
extension ViewController: CLLocationManagerDelegate {
    
    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
        
        // 0.判斷當前的角度是否有效(如果此值小於0,代表角度無效)
        if newHeading.headingAccuracy < 0 { return }
        
        // 1.獲取當前設備朝向(0- 359.9 角度)
        let angle = newHeading.magneticHeading
        
        // 1.1 把角度轉換成為弧度
        let hudu = CGFloat(angle / 180 * M_PI)
        
        // 2. 反向旋轉圖片(弧度)
        UIView.animate(withDuration: 0.5, animations: {
            self.compassView.transform = CGAffineTransform(rotationAngle: -hudu)
        })
    }
}


本文源碼 Demo 詳見 Github
https://github.com/shorfng/iOS_7.0_Device-Tools


作者:藍田(Loto)
【作品發佈平臺】

簡書
博客園
Gitbook(如果覺得文章太長,請閱讀此平臺發佈的文章)

【代碼托管平臺】

Github

【如有疑問,請通過以下方式交流】

評論區回覆
發送郵件[email protected]


本文版權歸作者和本網站共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝合作。


如果覺得我的文章對您有用,請隨意打賞。您的支持將鼓勵我繼續創作!
  • 支付寶掃一掃 向我打賞

  • 你也可以微信 向我打賞


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • UICollectionView 適配 iPhone 7 Plus 需求:在屏幕上水平放置 5 張正方形圖片,每張圖片的寬度相等,無縫隙排列鋪滿一個屏幕寬度。 看似很簡單的需求。用 UICollectionView 實現的話,把 UICollectionView 的寬度設置為屏幕寬度;屏幕寬度除以 ...
  • 譯者註:由於本人水平有限,譯文中難免會出現概念模糊、晦澀難懂,如果實在沒心思看下去,請發揮你的學習能動性,到原文中自行翻譯,感謝!!!點 "這裡" ,直達英文各種長句的世界。 好了,既然你選擇繼續往下看,那就一起來學習吧!!! 譯者:Noddy 地址: "直流電路理論" 如果你喜歡本譯文,請到項目上 ...
  • 1.應用程式 Android會同一系列核心應用程式包一起發佈,該應用程式包包括email客戶端,SMS短消息程式,日曆,地圖,瀏覽器,聯繫人管理程式等。所有的應用程式都是使用JAVA語言編寫的。 2.應用程式框架 開發人員也可以完全訪問核心應用程式所使用的API框架。該應用程式的架構設計簡化了組件的 ...
  • 有這樣一個ListView,要求在屏幕底部有一個篩選排序的浮動框: 1、手指下拉隱藏,上滑顯示 ; 2、如果沒做任何操作,2S之後,要自動顯示; 3、滑動到最底部,始終顯示。 首先看其效果圖: 實現上述效果,其實現原理如下: 1、在屏幕頂部固定一個BottomView,XML佈局最好使用Relati ...
  • 有一個Button 按鈕,要想為該按鈕設置onClick事件和OnTouch事件 此時,我們現在分析一下,是onTouch先執行,還是onClick執行,接下來我從FrameWork 源碼去探尋一下整個事件的執行流程和原理: 我們知道 Button ,TextView 等基礎控制項的基類都是View, ...
  • 主要原理:是在主界面有兩個空間,一個是EditText,一個是ListView,ListView是放在EditText下麵的,然後自定義建立一個adapter適配器, 這個適配器要繼承Filterable這個介面,並實現這個介面的兩個方法,一個是過濾方法,一個是過濾後的方法,一般我們是在過濾方法裡面 ...
  • Android原生的CalendarView根本無法滿足我們日常開發的需要,在開發吾記APP的過程中,我覺得需要來一款高性能且美觀簡潔的日曆控制項,覺得魅族的日曆風格十分適合,於是打算擼一款。 github地址:https://github.com/huanghaibin-dev/CalendarVi ...
  • 想獲取用戶各項行為數據嗎? 想輕鬆查看用戶行為圖表嗎? 想高效進行 App 運營管理嗎? 想,來我帶你玩轉 App 數據統計。這裡我使用專業、輕便的 "JAnalytics" 。 本文內容分為兩部分:代碼示例&使用技巧部分、控制台圖表查看部分。 代碼示例&使用技巧 集成 1. 下載 "JAnalyt ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...