你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS開發之MapKit框架的使用

iOS開發之MapKit框架的使用

編輯:IOS開發基礎

文/Corwien

一、MapKit框架使用前提

1、導入框架

1370580239-578c725478fe2_articlex.png

2、導入主頭文件

#import 

MapKit框架使用須知:

  • MapKit框架中所有數據類型的前綴都是MK

  • MapKit有一個比較重要的UI控件 :MKMapView,專門用於地圖顯示

1064065846-578c73739a3c0_articlex.png

二、跟蹤顯示用戶的位置

設置MKMapView的userTrackingMode屬性可以跟蹤顯示用戶的當前位置

  • MKUserTrackingModeNone :不跟蹤用戶的位置

  • MKUserTrackingModeFollow :跟蹤並在地圖上顯示用戶的當前位置

  • MKUserTrackingModeFollowWithHeading :跟蹤並在地圖上顯示用戶的當前位置,地圖會跟隨用戶的前進方向進行旋轉

下圖是跟蹤效果:

2747718083-578c73e5862b0_articlex.png

  • 藍色發光圓點就是用戶的當前位置

  • 藍色發光原點,專業術語叫做“大頭針”

三、地圖的類型

可以通過設置MKMapView的mapViewType設置地圖類型

MKMapTypeStandard :普通地圖(左圖)

MKMapTypeSatellite :衛星雲圖 (中圖)

MKMapTypeHybrid :普通地圖覆蓋於衛星雲圖之上(右圖)

1469071306327359.png

MKMapView的代理

MKMapView可以設置一個代理對象,用來監聽地圖的相關行為

常見的代理方法有

1、調用非常頻繁,不斷監測用戶的當前位置

每次調用,都會把用戶的最新位置(userLocation參數)傳進來

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation;

2、地圖的顯示區域即將發生改變的時候調用

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;

3、地圖的顯示區域已經發生改變的時候調用

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;

MKUserLocation

MKUserLocation其實是個大頭針模型,包括以下屬性

①、顯示在大頭針上的標題

@property (nonatomic, copy) NSString *title;

②、顯示在大頭針上的子標題

@property (nonatomic, copy) NSString *subtitle;

③、地理位置信息

@property (readonly, nonatomic) CLLocation *location;

四、設置地圖的顯示

通過MKMapView的下列方法,可以設置地圖顯示的位置和區域

設置地圖的中心點位置

@property (nonatomic) CLLocationCoordinate2D centerCoordinate;
- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;

設置地圖的顯示區域

@property (nonatomic) MKCoordinateRegion region;
- (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;
MKCoordinateRegion
MKCoordinateRegion是一個用來表示區域的結構體,定義如下
typedef struct {
      CLLocationCoordinate2D center; // 區域的中心點位置
      MKCoordinateSpan span; // 區域的跨度
} MKCoordinateRegion;

MKCoordinateSpan的定義

typedef struct {
    CLLocationDegrees latitudeDelta; // 緯度跨度
    CLLocationDegrees longitudeDelta; // 經度跨度
} MKCoordinateSpan;

五、大頭針

什麼是大頭針

現實生活中的大頭針(左圖)

地圖上的大頭針(右圖)

3438183407-578c89cba7cd8_articlex.png

釘在某個具體位置,用來標識這個位置上有特定的事物(比如這個位置上有家餐館)

大頭針的基本操作

1.添加一個大頭針

- (void)addAnnotation:(id )annotation;

2.添加多個大頭針

- (void)addAnnotations:(NSArray *)annotations;

3.移除一個大頭針

- (void)removeAnnotation:(id )annotation;

4.移除多個大頭針

- (void)removeAnnotations:(NSArray *)annotations;

(id )annotation參數是什麼東西?

大頭針模型對象:用來封裝大頭針的數據,比如大頭針的位置、標題、子標題等數據

大頭針模型

新建一個大頭針模型類

#import 
@interface MJTuangouAnnotation : NSObject 
/** 坐標位置 */
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
/** 標題 */
@property (nonatomic, copy) NSString *title;
/** 子標題 */
@property (nonatomic, copy) NSString *subtitle;
@end

添加大頭針

MJTuangouAnnotation *anno = [[MJTuangouAnnotation alloc] init];
anno.title = @"廣州荔灣";
anno.subtitle = @“白天鵝賓館歡迎您";
anno.coordinate = CLLocationCoordinate2DMake(80, 166);
[self.mapView addAnnotation:anno];

自定義大頭針

很多情況下,需要自定義大頭針的顯示樣式,比如顯示一張圖片

1709332883-578c8f6a8bd78_articlex.png

2840673852-578c904aa1a6a_articlex.png

如何自定義大頭針

設置MKMapView的代理

實現下面的代理方法,返回大頭針控件

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation;

根據傳進來的(id )annotation參數創建並返回對應的大頭針控件

代理方法的使用注意:

  • 如果返回nil,顯示出來的大頭針就采取系統的默認樣式

  • 標識用戶位置的藍色發光圓點,它也是一個大頭針,當顯示這個大頭針時,也會調用代理方法

因此,需要在代理方法中分清楚(id )annotation參數代表自定義的大頭針還是藍色發光圓點。

示例:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
{
    // 判斷annotation的類型
    if (![annotation isKindOfClass:[MJTuangouAnnotation class]]) return nil;
    // 創建MKAnnotationView
    static NSString *ID = @"tuangou";
    MKAnnotationView *annoView = [mapView dequeueReusableAnnotationViewWithIdentifier:ID];
    if (annoView == nil) {
        annoView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];
        annoView.canShowCallout = YES;
   }
    // 傳遞模型數據
    annoView.annotation = annotation;
    // 設置圖片
    MJTuangouAnnotation *tuangouAnnotation = annotation;
    annoView.image = [UIImage imageNamed:tuangouAnnotation.icon];
    return annoView;
}

MKAnnotationView

地圖上的大頭針控件是MKAnnotationView

MKAnnotationView的屬性

1、大頭針模型

@property (nonatomic, strong) id  annotation;

2、顯示的圖片

@property (nonatomic, strong) UIImage *image;

3、是否顯示標注

@property (nonatomic) BOOL canShowCallout;

4、標注的偏移量

@property (nonatomic) CGPoint calloutOffset;

5、標注右邊顯示什麼控件

@property (strong, nonatomic) UIView *rightCalloutAccessoryView;

6、標注左邊顯示什麼控件

@property (strong, nonatomic) UIView *leftCalloutAccessoryView;

MKPinAnnotationView

MKPinAnnotationView是MKAnnotationView的子類

MKPinAnnotationView比MKAnnotationView多了2個屬性

大頭針顏色

@property (nonatomic) MKPinAnnotationColor pinColor;

大頭針第一次顯示時是否從天而降

@property (nonatomic) BOOL animatesDrop;

完整示意圖:

1469071548318690.png

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved