自定義大頭針其實(shí)沒什么東西,講講簡單的自定義大頭針吧犀变!
-
1.需要定義大頭針模型(里面至少有三個(gè)屬性)
#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface AnnotationModel : NSObject<MKAnnotation> /* 1.導(dǎo)入框架 2.遵守大頭針模型的協(xié)議 3.重寫3個(gè)屬性 */ /* 大頭針的位置 */ @property(nonatomic,assign) CLLocationCoordinate2D coordinate; /* 大頭針的標(biāo)題 */ @property(nonatomic,copy) NSString *title; /* 大頭針的子標(biāo)題 */ @property(nonatomic,copy) NSString *subtitle;
2.在此我是采取單擊mapView的方式來獲取大頭針的添加(給mapView添加手勢)挨约,調(diào)用手勢方法來添加大頭針
-
3.在大頭針添加的時(shí)候回調(diào)用一個(gè)方法(在里面進(jìn)行對大頭針的各種設(shè)置):里面有很多的細(xì)節(jié)担租,需要的就認(rèn)真研究
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { //判斷當(dāng)前大頭針是不是用戶位置的數(shù)據(jù)模型 if ([annotation isKindOfClass:[MKUserLocation class]]) { //返回nil系統(tǒng)自動處理 return nil; } //1.從緩存池里面取 //注意:默認(rèn)情況下 MKAnotationView 是無法顯示的砖顷,如果想自定義大頭針创南,可以使用MKNotationView的子類MKPinAnnotationView static NSString *annotationID = @"annotationID"; //判斷當(dāng)前的大頭針數(shù)據(jù)模型是不是用戶位置的數(shù)據(jù)模型 //注意:如果是自定義的大頭針涩嚣,默認(rèn)情況下大頭針是不會顯示標(biāo)題的崇众,需要自己手動顯示設(shè)置 MKAnnotationView *annotationView = [self.mapView dequeueReusableAnnotationViewWithIdentifier:annotationID]; //2.如果緩存池中沒有,創(chuàng)建一個(gè)新的 if (!annotationView) { annotationView = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:annotationID]; //設(shè)置打頭陣的顏色 // annotationView.pinTintColor = [UIColor purpleColor]; //設(shè)置大頭針從天而降 // annotationView.animatesDrop = YES; //設(shè)置大頭針標(biāo)題是否顯示 annotationView.canShowCallout = YES; //設(shè)置大頭針顯示區(qū)域的偏移位 //annotationView.calloutOffset = CGPointMake(-50, 0); //設(shè)置大頭針左邊的輔助視圖 annotationView.leftCalloutAccessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"user"]]; //設(shè)置大頭針右邊的輔助視圖 annotationView.rightCalloutAccessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"電話"]]; //設(shè)置大頭針的拖動 annotationView.draggable = YES; } //設(shè)置大頭針的圖片 //注意:如果你是使用MKPinAnnotationView創(chuàng)建的自定義大頭針掂僵,那么設(shè)置圖片無效,因?yàn)橄到y(tǒng)內(nèi)部會做一下操作覆蓋掉我們自己的設(shè)置 annotationView.image = [UIImage imageNamed:@"airplane"]; //3.給大頭針View設(shè)置數(shù)據(jù) annotationView.annotation = annotation; //4.返回大頭針view return annotationView; }
4.具體的代碼