iOS專案開發實戰——使用CoreLocation實現定位
CoreLocation是蘋果官方提供的一個框架,可以實現很多地理位置操作上的功能。比如地圖顯示,定位,地理位置編碼等。現在我們來實現定位功能。
(1)程式碼實現如下:
#import "ViewController.h"
#import <MapKit/MapKit.h>
@interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic,strong) MKMapView *mapView;
@property (nonatomic,strong) CLLocationManager *locationManager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
[_mapView setShowsUserLocation:true];
[_mapView setMapType:MKMapTypeStandard];
[self.view addSubview:_mapView];
//監測定位功能是否開啟
if ([CLLocationManager locationServicesEnabled]) {
NSLog(@"已經開啟定位");
if (!_locationManager) {
_locationManager = [[CLLocationManager alloc] init];
if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[_locationManager requestWhenInUseAuthorization];
[_locationManager requestAlwaysAuthorization];
}
//設定代理;
[_locationManager setDelegate:self];
//設定定位精度;
[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
//設定距離篩選;
[_locationManager setDistanceFilter:100];
//開始定位;
[_locationManager startUpdatingLocation];
}
}else{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"您沒有開啟定位功能"
delegate:nil
cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
[alertView show];
}
}
//授權狀態發生改變的時候;
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
switch (status) {
case kCLAuthorizationStatusDenied:
{
NSLog(@"拒絕了授權");
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"您已經拒絕了授權"
delegate:nil cancelButtonTitle:@"確定"
otherButtonTitles:nil, nil];
[alertView show];
}
break;
default:
break;
}
}
//定位成功以後呼叫
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
CLLocation *location = locations.lastObject;
MKCoordinateRegion coordinateRegion = MKCoordinateRegionMake(CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude), MKCoordinateSpanMake(0.1, 0.1));
[_mapView setRegion:[_mapView regionThatFits:coordinateRegion] animated:true];
}
//定位失敗以後呼叫
-(void) locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"error:%@",error);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
(2)在模擬器下執行,效果如下:本人在中國,卻給我定位到美國了,可見使用模擬器來測試非常的不靠譜。
。
下面是在真機中執行,定位較為準確:
。
github主頁:https://github.com/chenyufeng1991 。歡迎大家訪問!
相關文章
- flask 專案開發實戰Flask
- 專案實戰介面開發SpringBootSpring Boot
- WEB實戰:使用MERN技術棧開發專案Web
- iOS – RxSwift 專案實戰記錄iOSSwift
- 最新Python開發專案實戰(完整)Python
- 小程式雲開發專案實戰
- django專案開發實戰——部落格Django
- 小冊上新:Taro 多端開發實現原理與專案實戰
- 一本實踐的專案開發《Python專案開發實戰(第2版)》Python
- 淺談設計模式在iOS開發實戰專案中的應用設計模式iOS
- Web專案開發介紹及實戰專案介紹Web
- 實戰|如何使用雲開發實現照片附件上傳開發
- 現有Android專案中整合Flutter/Flutter混合開發實戰(一)AndroidFlutter
- 專案實戰之gradle在實際專案中的使用Gradle
- iOS開發——專案實戰總結&UITableView效能優化與卡頓問題iOSUIView優化
- git實戰-多分支開發-2022新專案Git
- Python爬蟲開發與專案實戰pdfPython爬蟲
- Python爬蟲開發與專案實戰(2)Python爬蟲
- Python爬蟲開發與專案實戰(1)Python爬蟲
- RabbitMQ專案開發實戰技巧-非常有用MQ
- 專案實戰之Rxjava、RxBinding在實際專案中的使用RxJava
- React Native iOS混合開發實戰教程React NativeiOS
- 鴻蒙專案實戰(三):自定義彈窗開發實踐鴻蒙
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- 【RAG 專案實戰 06】使用 LangChain 結合 Chainlit 實現文件問答LangChain
- 《Node+MongoDB+React 專案實戰開發》已出版MongoDBReact
- 3.0 阿里雲大資料專案實戰開發阿里大資料
- Kotlin 入門開發__安卓小專案實戰Kotlin安卓
- Jenkins實現持續整合 使用Ant指令碼構建ios專案Jenkins指令碼iOS
- LittleFox專案實戰
- HarmonyOS 實戰專案
- python實戰專案Python
- dubbo專案實戰
- Python爬蟲開發與專案實戰--分散式程式Python爬蟲分散式
- Appium iOS 測試指令碼開發實戰APPiOS指令碼
- 使用EventStoreDB實現事件溯源的Python開源專案事件Python
- 使用EventStoreDB實現事件溯源的Java開源專案事件Java
- tp5+ionic開發微信公眾號專案實戰專案教程
- 鴻蒙Next開發實戰教程-使用WebSocket實現即時聊天鴻蒙Web