使用MapKit框架
这个常量如果被设置,视图的高度将和父视图的高度一起成比例变化。否则,视图的高度将保持不变。
这个常量如果被设置,视图的宽度将和父视图的宽度一起成比例变化。否则,视图的宽度将保持不变。
这个常量如果被设置,视图的左边界将随着父视图宽度的变化而按比例进行调整。否则,视图和其父视图的左边界的相对位置将保持不变。
这个常量如果被设置,视图的右边界将随着父视图宽度的变化而按比例进行调整。否则,视图和其父视图的右边界的相对位置将保持不变。
这个常量如果被设置,视图的底边界将随着父视图高度的变化而按比例进行调整。否则,视图和其父视图的底边界的相对位置将保持不变。
这个常量如果被设置,视图的上边界将随着父视图高度的变化而按比例进行调整。否则,视图和其父视图的上边界的相对位置将保持不变。
RootViewController.m
位置定位
// // RootViewController.m // CoreLocation // Copyright (c) 2014年 Y.X. All rights reserved. #import "RootViewController.h" #import MapKit/MapKit.h @interface RootViewController () CLLocationManagerDelegate @property (nonatomic, strong) CLLocationManager *locationManager; @implementation RootViewController - (void)viewDidLoad [super viewDidLoad]; // 判断定位功能是否可以使用 if([CLLocationManager locationServicesEnabled]) // 初始化定位管理器 _locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; // 开始定位 [_locationManager startUpdatingLocation]; else NSLog(@"定位功能不可用"); - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations CLLocation *newLocation = [locations lastObject]; NSLog(@"%@", newLocation); // 定位结束 [manager stopUpdatingLocation]; - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error NSLog(@"%@", error); // 定位结束 [manager stopUpdatingLocation]; RootViewController.m
为什么需要判断定位功能可不可用呢?下图可以看出为什么了.
打印信息:
2014-05-15 09:25:11.883 CoreLocation[17610:60b] +37.78583400,-122.40641700 +/- 5.00m (speed -1.00 mps / course -1.00) @ 5/15/14, 9:25:11 AM China Standard Time
本人将这个代理定位的方式改写成了可以使用block的方式:
YXLocation.h
// // YXLocation.h // CoreLocation // Copyright (c) 2014年 Y.X. All rights reserved. #import Foundation/Foundation.h #import MapKit/MapKit.h @protocol YXLocationProtocol NSObject @optional - (void)currentLocation:(CLLocation *)location sucess:(BOOL)sucess; typedef void (^locationBlock_t)(CLLocation *currentLocation, BOOL sucess); @interface YXLocation : NSObject @property (nonatomic, copy, readwrite) locationBlock_t locationBlock; @property (nonatomic, assign, readwrite) id YXLocationProtocol protocol; @property (nonatomic, strong, readonly) CLLocation *location; - (void)start; Code
YXLocation.m
// // YXLocation.m // CoreLocation // Copyright (c) 2014年 Y.X. All rights reserved. #import "YXLocation.h" @interface YXLocation () CLLocationManagerDelegate @property (nonatomic, strong) CLLocationManager *locationManager; @implementation YXLocation - (instancetype)init self = [super init]; if (self) _locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; return self; - (void)start if([CLLocationManager locationServicesEnabled]) [_locationManager startUpdatingLocation]; else NSLog(@"定位功能没有开启"); if (_locationBlock) _locationBlock(nil, NO); if (_protocol) [_protocol currentLocation:nil sucess:NO]; - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations CLLocation *newLocation = [locations lastObject]; _location = newLocation; if (_locationBlock) _locationBlock(newLocation, YES); if (_protocol) [_protocol currentLocation:newLocation sucess:YES]; [_locationManager stopUpdatingLocation]; - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error NSLog(@"定位功能出错"); if (_locationBlock) _locationBlock(nil, NO); if (_protocol) [_protocol currentLocation:nil sucess:NO]; Code
将经纬度转换为有意义的地址
// // RootViewController.m // CoreLocation // Copyright (c) 2014年 Y.X. All rights reserved. #import "RootViewController.h" #import MapKit/MapKit.h @interface RootViewController () CLLocationManagerDelegate @property (nonatomic, strong) CLLocationManager *locationManager; @property (nonatomic, strong) CLGeocoder *geocoder; @implementation RootViewController - (void)viewDidLoad [super viewDidLoad]; // 判断定位功能是否可以使用 if([CLLocationManager locationServicesEnabled]) // 初始化定位管理器 _locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; // 开始定位 [_locationManager startUpdatingLocation]; else NSLog(@"定位功能不可用"); - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations CLLocation *newLocation = [locations lastObject]; // 初始化经纬度解析器 _geocoder = [[CLGeocoder alloc] init]; // 解析经纬度值 [_geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) { CLPlacemark *placemark = [placemarks objectAtIndex:0]; // 将字典信息拼接起来 NSString *locatedAt = \ [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]; // 打印信息 NSLog(@"我在 %@",locatedAt); NSLog(@"国家代码 %@",placemark.ISOcountryCode); NSLog(@"国家 %@",placemark.country); NSLog(@"邮政编码 %@",placemark.postalCode); NSLog(@"administrativeArea %@",placemark.administrativeArea); NSLog(@"locality %@",placemark.locality); NSLog(@"subLocality %@",placemark.subLocality); NSLog(@"subThoroughfare %@",placemark.subThoroughfare); // 定位结束 [manager stopUpdatingLocation]; - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error NSLog(@"%@", error); // 定位结束 [manager stopUpdatingLocation]; RootViewController.m
打印信息如下:
2014-05-15 09:40:13.982 CoreLocation[2482:60b] 我在 中国北京市东城区东四街道东四朝阳门北小街2-1号
2014-05-15 09:40:13.986 CoreLocation[2482:60b] 国家代码 CN
2014-05-15 09:40:13.987 CoreLocation[2482:60b] 国家 中国
2014-05-15 09:40:13.988 CoreLocation[2482:60b] 邮政编码 (null)
2014-05-15 09:40:13.989 CoreLocation[2482:60b] administrativeArea 北京市
2014-05-15 09:40:13.991 CoreLocation[2482:60b] locality (null)
2014-05-15 09:40:13.992 CoreLocation[2482:60b] subLocality 东城区
2014-05-15 09:40:13.993 CoreLocation[2482:60b] subThoroughfare 2-1号
将有意义的地址转换为经纬度
// // RootViewController.m // CoreLocation // Copyright (c) 2014年 Y.X. All rights reserved. #import "RootViewController.h" #import MapKit/MapKit.h @interface RootViewController () CLLocationManagerDelegate @property (nonatomic, strong) CLGeocoder *geocoder; @implementation RootViewController - (void)viewDidLoad [super viewDidLoad]; _geocoder = [[CLGeocoder alloc] init]; [_geocoder geocodeAddressString:@"中国北京市东城区东四街道东四朝阳门北小街2-1号" completionHandler:^(NSArray *placemarks, NSError *error) if([placemarks count] 0 error == nil) NSLog(@"发现了 %lu placemark(s).",(unsigned long)[placemarks count]); CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0]; NSLog(@"经度 = %f",firstPlacemark.location.coordinate.longitude); NSLog(@"纬度 = %f",firstPlacemark.location.coordinate.latitude); else if ([placemarks count] == 0 error == nil) NSLog(@"没有找到 placemarks."); else if (error != nil) NSLog(@"错误 = %@",error); RootViewController.m
打印信息:
2014-05-15 09:51:15.270 CoreLocation[2525:60b] 发现了 2 placemark(s).
2014-05-15 09:51:15.274 CoreLocation[2525:60b] 经度 = 116.425960
2014-05-15 09:51:15.275 CoreLocation[2525:60b] 纬度 = 39.931609
直接显示用户当前位置
// // RootViewController.m // CoreLocation // Copyright (c) 2014年 Y.X. All rights reserved. #import "RootViewController.h" #import MapKit/MapKit.h @interface RootViewController () CLLocationManagerDelegate @property (nonatomic, strong) CLLocationManager *locationManager; @implementation RootViewController - (void)viewDidLoad [super viewDidLoad];
_locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; // 开始定位 [_locationManager startUpdatingLocation]; else NSLog(@"定位功能不可用"); - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations // 获取坐标信息 CLLocation *newLocation = [locations lastObject]; // 定位结束 [manager stopUpdatingLocation]; // 初始化地图控件 MKMapView *mapView = [[MKMapView alloc] initWithFrame:self.view.bounds]; // 地图的类型 mapView.mapType = MKMapTypeStandard; // 视图的宽度和高度将和父视图的宽度一起成比例变化 mapView.autoresizingMask = \ UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; // 显示用户所在位置(此处系统会询问你是否使用当前位置) mapView.showsUserLocation = YES; // 地图缩放级别 MKCoordinateSpan span = {0.02, 0.02}; // 被显示的区域 MKCoordinateRegion region = {newLocation.coordinate, span}; // 设置显示的区域 [mapView setRegion:region]; // 显示地图 [self.view addSubview:mapView]; - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error NSLog(@"%@", error); // 定位结束 [manager stopUpdatingLocation]; RootViewController.m
中间件增强框架之-CaptureFramework框架 本文为大家讲解MOF中的CaptureFramework框架。该框架提供统一的数据抓取行为和生成抓取结果能力,实现实时数据采集。
CoreMotion框架(一)—— 基础理论CoreMotion框架(三)—— 获取陀螺仪数据CoreMotion框架(二)—— 利用加速度计获取设备的方向CoreMotion框架(四)—— 仿摩拜贴纸小球碰撞动画
pinctrl框架【转】 转自:http://www.cnblogs.com/kevinhwang/p/5703192.html pinctrl框架是linux系统为统一各SOC厂家pin管理,目的是为了减少SOC厂家系统移植工作量。
相关文章
- 从零实现Web框架Geo教程-上下文-02
- layui框架——弹出层layer[通俗易懂]
- 【企业架构框架】如何使用新的 TOGAF 版本 10
- CVPR 2022 ActivityNet竞赛冠军:中科院深圳先进院提出高低分双模态行为识别框架
- Hmily 源码解析 (三) —— 高效异步任务框架的使用
- Vue.js框架中权衡的艺术
- 面试:第二章:各种框架和中间件以及缓存数据库
- SpringBoot框架:第二章:SpringBoot中static和templates二个目录下的页面和静态资源访问的三个常见问题
- 软件测试|Flask框架-接口使用
- BT - Unet:生物医学图像分割的自监督学习框架
- 【Rust日报】2023-01-03 turmoil - 由 Tokio 推出用于开发和测试分布式系统的框架
- 如何做好一个业务中台框架
- 【Android 插件化】Hook 插件化框架 ( 创建插件应用 | 拷贝插件 APK | 初始化插件包 | 测试插件 DEX 字节码 )
- 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 )
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类详解编程语言
- MySQL数据迁移:简单、快速、可靠(mysql数据迁移框架)
- CI框架如何使用Redis提升程序效率(ci使用redis)
- 使用MVC框架连接Oracle数据库的步骤详解(mvc连接oracle)
- 使用C ORM 框架简化Oracle 操作(c orm oracle)
- 使用Knex框架在Oracle数据库中构建可靠的API(knex oracle)
- 京东强力加持,利用Redis框架进行大数据存储(京东redis框架)
- 使用Yii框架实现Redis分布式锁(yii redis 锁)
- Vue框架下的Redis调用实战(vue调用redis)
- TP框架下Redis的使用指南(tp上怎么使用redis)
- Oracle数据库性能优化框架简介(oracle优化框架)
- 如何使用Redis而无需框架(不用框架怎么用redis)
- 实现自动化运维,Redis自动运维框架来帮你(redis自动运维框架)
- JqueryAJAX框架的使用方法
- Mysqllimit优化,百万至千万级快速分页复合索引的引用并应用于轻量级框架
- SpringMVC框架搭建配置方法及详解