iOS-UI知识点纵览
//知识点纵览
//地图的使用
//<1>显示地图
// (1)库和头文件导入
// (2)显示地图
//<2>设置显示的位置和缩放
//<3>添加大头针
//<4>获取当前位置
//其他功能
// 知道两个经纬度, 如何计算这两个经纬度的距离
//知识点详解
#import <MapKit/MapKit.h>
//<1>显示地图
//细节1: 直接设置则显示世界地图
//细节2: 地图类型三种: 普通地图, 卫星地图, 混合地图
mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
//细节3: 需要遵守协议
mapView.delegate = self;
mapView.showsUserLocation = YES;
//mapView.mapType = MKMapTypeStandard;
//<2>设定显示的位置
//定义经度纬度
CLLocationCoordinate2D coordinate2d = CLLocationCoordinate2DMake(40.034827,116.311836);
//设置缩放比例
MKCoordinateSpan span = MKCoordinateSpanMake(0.1,0.1);
//根据经纬度和缩放比例设置显示区域
MKCoordinateRegion region = MKCoordinateRegionMake(coordinate2d,span);
mapView.region = region;
[self.view addSubview:mapView];
//<3>显示大头针
//需要定义一个遵守大头针协议的类
//细节: 需遵守这个协议
@interface CustomAnnotation : NSObject<MKAnnotation>
-(id) initWithCoordinate:(CLLocationCoordinate2D)coords;
@property (nonatomic, readonly) CLLocationCoordinate2Dcoordinate;
@property (nonatomic, copy) NSString*title;
@property (nonatomic, copy) NSString*subtitle;
@end
//类的实现
@implementation CustomAnnotation
-(id) initWithCoordinate:(CLLocationCoordinate2D)coords
{
if(self = [super init]) {
_coordinate= coords;
}
returnself;
}
@end
//设置大头针的位置
CLLocationCoordinate2D coords = CLLocationCoordinate2DMake(40.034827,116.311836);
CustomAnnotation *annotation = [[CustomAnnotationalloc] initWithCoordinate:coords];
annotation.title = @"标题";
annotation.subtitle = @"子标题";
[mapView addAnnotation:annotation];
//<4>获取当前位置
locationManager = [[CLLocationManager alloc]init];
//需要设置代理
locationManager.delegate = self;
[locationManager startUpdatingLocation];
//位置更新之后调用
- (void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation*)oldLocation {
[locationManager stopUpdatingLocation];
NSString *strLat = [NSString stringWithFormat:@"%.4f",newLocation.coordinate.latitude];
NSString *strLng = [NSString stringWithFormat:@"%.4f",newLocation.coordinate.longitude];
NSLog(@"Lat: %@ Lng: %@", strLat, strLng);
//定位后直接移动到该区域
CLLocationCoordinate2D coords = CLLocationCoordinate2DMake(newLocation.coordinate.latitude,newLocation.coordinate.longitude);
float zoomLevel = 0.02;
MKCoordinateRegion region = MKCoordinateRegionMake(coords,MKCoordinateSpanMake(zoomLevel,zoomLevel));
[mapView setRegion:[mapView regionThatFits:region]animated:YES];
}
//位置更新错误之后执行
- (void)locationManager:(CLLocationManager*)manager didFailWithError:(NSError *)error {
NSLog(@"locError:%@", error);
}
//其他功能
// 知道两个经纬度, 如何计算这两个经纬度的距离
//计算两个点的距离
// 核心: 使用CLLocation类的对象的 distanceFromLocation:方法
+(double)distanceBetweenOrderBy:(double)lat1:(double)lat2 :(double)lng1 :(double)lng2{
CLLocation* curLocation = [[CLLocation alloc]initWithLatitude:lat1 longitude:lng1];
CLLocation* otherLocation = [[CLLocation alloc]initWithLatitude:lat2 longitude:lng2];
double distance = [curLocation distanceFromLocation:otherLocation];
return distance;
}