iOS学习之路08
来源:互联网 发布:超市数据分析报告格式 编辑:程序博客网 时间:2024/06/04 19:23
- MapKit
- MKMapView类
- MKMapView是显示地图的视图,只需要将MKMapView对象添加到self.view中即可实现地图显示
- 常用属性
- mapType:地图视图类型
- MKMapTypeStandard:交通地图
- MKMapTypeSateLLite:卫星地图
- MKMapTypeHybrid:交通和卫星地图
- MKMapTypeSateLLiteHyover:3D立体地图
- MKMapTypeHybridFlyover:3D混合地图
- showsUserLocation:设置是否显示用户定位
- delegate:MKMapViewDelegate委托
- 添加标注
- 创建MKPointAnnotation标注对象,并设置属性
MKPointAnnotation *pointAnnotation = [[MKPointAnnotation alloc] init];
// 设置点标注的经纬度
pointAnnotation.coordinate = coordinate;
// 设置辅助视图的中间视图的正标题。如果未设置标题,会导致辅助视图无法显示
pointAnnotation.title = @"查询地名中...";
// 设置辅助视图的中间视图的副标题
pointAnnotation.subtitle = [NSString stringWithFormat:@"%f, %f",coordinate.latitude,coordinate.longitude];
[self.mapView addAnnotation:pointAnnotation];
- 实现mapView: viewForAnnotation: 委托方法,将标注转化为MKAnnotationView标注视图。将标注试图添加到地图视图上时会调用此委托
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
// 判断annotation(标注)是否为用户当前位置的标注
if (![annotation isKindOfClass:[MKPointAnnotation class]]) {
return nil;
}
NSString *identifier = @"annotationViewIdentifier";
//添加 MKPinAnnotationView标注视图
MKPinAnnotationView *pinAnnotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (!pinAnnotationView) {
pinAnnotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
// 这里就可以自定标注视图了
pinAnnotationView.pinTintColor = [UIColor orangeColor]; // pinTintColor属性属于 自己MKPinAnnotationView
// 标注视图是否要显示注释内容
pinAnnotationView.canShowCallout = YES; // canShowCallout属性属于 父类MKAnnotationView
// 在标注时是否以动画的形式出现
pinAnnotationView.animatesDrop = YES; // animatesDrop属性属于 自己MKPinAnnotationView
}
return pinAnnotationView;
}
- MKAnnotationView(标注试图类)
- 常用属性
- canShowCallout:是否显示辅助视图(注释内容)
- image:设置标注视图显示的图片
- leftCalloutAccessoryView:设置辅助视图的左侧视图
- rightCalloutAccessoryView:设置辅助视图的右侧视图
- centerOffeset:设置标注视图图片的偏移量。x取负值—向左移动,y取负值:向上移动
- calloutOffset:设置辅助视图的偏移量
- MKPinAnnotationView(父类:MKAnnotationView)
- 常用属性
- pinTintColor:设置标注视图颜色
- animatesDrop:设置是否以动画的形式出现
- 定位
- CLLocationManager:定位管理类
- 常用属性
- distanceFilter:更新频率,用户位置差多少m后更新定位
- desiredAccuracy:定位精度,允许误差范围
KCLLocationAccuracyBastForNavigation:最精准,适用于导航
KCLLocationAccuracyBast:最精准
KCLLocationAccuracyNearestTenMeters:十米误差
KCLLocationAccuracyHundredMeters:百米误差
KCLLocationAccuracyKilometer:千米误差
KCLLocationAccuracyThreeKilometers:三千米误差
- 实现定位的步骤
- 设置mapView.showsUserLocation = YES;显示用户定位的属性
- 在info.plist文件中添加属性NSLocationWhenInUseUsageDescription(只有应用程序处于前台时才能定位)或加属性NSLocationAlwaysUsageDescription(应用程序处于前台/后台都可定位)
- 请求用户App是否可以获取用户定位
// respondsToSelector:判断是否存在某方法
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
/* requestWhenInUseAuthorization方法:请求当前用户,是否可以定位用户的位置
在调用这个方法前需要在info.plist文件中添加属性NSLocationWhenInUseUsageDescription(只有应用程序处于前台时才能定位)
或者属性NSLocationAlwaysUsageDescription(应用程序处于前台/后台都可以定位)
*/
[self.locationManager requestWhenInUseAuthorization];
}
- 实现委托方法mapView: didUpdateUserLocation: 在方法中放置mapView的region(地图范围)属性。CLLocation对象:代表随着精度、时间戳信息的地理坐标
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
NSLog(@"用户位置已经更新");
// 设置中心点,中心点即使用户当前所在的位置 // CLLocation对象:代表随着精度和时间戳信息的地理坐标
CLLocationCoordinate2D center = userLocation.location.coordinate;// coordinate:当前位置的坐标
// 设置地图跨度
MKCoordinateSpan span = {0.01, 0.01};
MKCoordinateRegion region = {center, span};
// 设置地图的范围,包含中心点、地图跨度
[mapView setRegion:region animated:YES];
}
- 实现委托方法mapView: viewForAnnotation: 如果未实现,标注将无法显示
- CLGeocoder
- 通过地址信息获取经纬度坐标
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:name completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
CLLocation *location = [placemarks lastObject].location;
NSLog(@"根据地名查询经纬度:%f, %f",location.coordinate.latitude,location.coordinate.longitude);
}];
- 通过经纬度坐标获取地址信息
// 创建地理编码对象
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
CLLocation *location = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
// 获取地址信息通过经纬度
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
NSString *addressName = [placemarks lastObject].name;
NSLog(@"%@",addressName);
// 查询出来地址信息后利用block对当前的那个辅助视图进行更新
if (self.geocoderCompletionHandler) {
self.geocoderCompletionHandler(addressName);
}
}];
- 注:在需要进行更新的地方(例:在添加标注的地方)将属性geocoderCompletionHandler实现
- 百度地图SDK
- iOS学习之路08
- ios学习之路
- IOS学习之路
- IOS菜鸟学习之路
- IOS开发学习之路
- iOS学习之路--多线程
- iOS学习之路01
- iOS学习之路02
- iOS学习之路03
- iOS学习之路04
- iOS学习之路05
- iOS学习之路06
- iOS学习之路07
- iOS学习之路09
- iOS学习之路10
- IOS学习之路之 音效处理
- iOS学习之路 XML处理
- iOS学习之路 XML处理
- Java的架构师
- 蓝桥杯java第三届决赛第四题--DNA比对
- 判断Integer值相等最好不用==最好使用equals
- jquery遍历数组与筛选数组的方法
- centos 6 7 differences 区别
- iOS学习之路08
- mysql 增删改查排序分页最简单的语法
- Esri wkt字符串转proj.4 字符串的方法
- OTT-TV网络电视EPG录制和EPG抓取解决方案
- bzoj1592 [Usaco2008 Feb]Making the Grade 路面修整 dp
- POJ 3268 Silver Cow Party [图论.最短路] 《挑战程序设计竞赛》2.5
- 遇到的各种坑
- JDK不配置环境变量也可以使用的方法(偏门)
- 99-IPv4 地址