1. 사용되는 프레임워크
- MapKit.framework
- CoreLocation.framework
2. 위치정보 사용은 첫번째 글 참고하세요^^
3. 지도 사용하는 방법
MKMapView * mapView;
MKCoordinateRegion region;
CLLocationDegrees lat;
CLLocationDegrees lon;
if(_mapView ==nil){
_mapView = [[MKMapView alloc]initWithFrame:self.mainContentView.bounds];
}
[_mapView setMapType:MKMapTypeStandard];
[_mapView setZoomEnabled:YES];
[_mapView setScrollEnabled:YES];
_mapView.delegate = self;
MKCoordinateSpan span;
span.latitudeDelta = 0.1;
span.longitudeDelta = 0.1;
region.center =CLLocationCoordinate2DMake(lat,lon);
region.span = span;
[_mapView setRegion:region animated:YES];
[_mapView setCenterCoordinate:region.center animated:YES];
[_mapView regionThatFits:region];
[_mapView setShowsUserLocation:YES];
[self.mainContentView addSubview:_mapView];
위와 같이 mapType을 정해준다(3가지 방식이있다.) region에 span은 확대정도, center는 지도의 center를 정해줄수있다. 이렇게 하면 화면에 내위치가 표시된 지도를 볼수 있다.
4. 지도 원하는 위치에 핀 원하는 이미지로 바꾸기, 길찾기 사용하는 방법
mapView Delegate Methods를 사용하면된다.
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {
if([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
static NSString *identifier = @"myAnnotation";
MKPinAnnotationView *annotationView =
(MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc]
initWithAnnotation:annotation
reuseIdentifier:identifier];
annotationView.image = [UIImage imageNamed:PIN_IMAGE];
annotationView.frame = CGRectMake(0, 0, 24, 37);
} else {
annotationView.annotation = annotation;
}
UIButton *pinButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
annotationView.rightCalloutAccessoryView = pinButton;
annotationView.canShowCallout = YES;
return annotationView;
}
이 Methods는 pin을 커스텀하는 방법이다. 위와같이 PIN_IMAGE랑 크기를 설정하면된다.
+ (CLLocationDistance)calculateDistanceWithMyLat:(double)mLat mLong:(double)mLong pinLat:(double)pLat pinLong:(double)pLong {
CLLocation *LocationA = [[CLLocation alloc] initWithLatitude:mLat longitude:mLong];
CLLocation *LocationB = [[CLLocation alloc] initWithLatitude:pLat longitude:pLong];
CLLocationDistance distance = [LocationB distanceFromLocation:LocationA];
return distance;
}
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
_distance = [Util calculateDistanceWithMyLat:현재위치 Lat mLong:현재위치 Lon pinLat: 핀위치 lat pinLong: 핀위치 lon];
CLLocationCoordinate2D rdOfficeLocation = CLLocationCoordinate2DMake(lat, lon);
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:rdOfficeLocation addressDictionary:nil];
MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark];
item.name = @"ReignDesign Office";
NSDictionary *options;
if(_distance < 3){
options = @{
MKLaunchOptionsDirectionsModeKey:
MKLaunchOptionsDirectionsModeWalking
};
}else{
options = @{
MKLaunchOptionsDirectionsModeKey:
MKLaunchOptionsDirectionsModeDriving
};
}
[item openInMapsWithLaunchOptions:options];
}
}
위에 메소드는 현재위치 location 정보와 핀을 찍을곳에 loaction정보를 가지고 거리를 구하는 것이다.
그 거리를 기준으로 3km이하이면 걷기모드 이상이면 자동차모드로 한것이다.
더궁금한점이나 이해안가는 부분있으면 댓글 남겨주세요
'iOS' 카테고리의 다른 글
[swift] iOS 주소 찾기 (0) | 2017.11.15 |
---|---|
앱스토어 버전 가져오기 (0) | 2015.09.11 |
iOS AudioSession 공부중.... (0) | 2015.05.28 |
NSDate 대해서 (0) | 2015.05.06 |
iBeacon api 사용법 (0) | 2015.04.30 |