en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

1.09.2011

在 MapView 上加入註解說明的大頭針 Pin

 

在之前的使用 MapKit 取得目前地理位置與經緯度的設定文章中已經介紹過基本的MapView用法,這裡就不再重複,以下程式碼只有示範如何在 MapView 上加上註解說明的大頭針 Pin 。(View-based Template)

若用 Pin 則必須使用到 Framework 中的 MK Annotation Class,按照開發者文件說明,要使用此功能必須建立一個使用 MKAnnotation 的類別,並宣告該賴別三個屬性和一個初始化方法。(有興趣的讀者可以前往 iOS Library 中查詢更詳細的使用方式,並不一定要按照本篇j的方法設定)

PlacePin.h


#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface PlacePin : NSObject <MKAnnotation> {

    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;
}

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *subtitle;

- (id)initWithCoordinate:(CLLocationCoordinate2D)coords;

@end

PlacePin.m

#import "PlacePin.h"

@implementation PlacePin
@synthesize coordinate, title, subtitle;

- (id)initWithCoordinate:(CLLocationCoordinate2D)coords {
    self = [super init];
    if (self != nil) coordinate = coords;

    return self;
}

- (void) dealloc {
    [title release];
    [subtitle release];

    [super dealloc];
}

@end

在建立好 Class 之後,別忘記在專案中還要 #import 才能正常使用。下列程式碼將示範如何使用剛剛自行建立的 Class 來實做在 MapView 上加上註解說明的大頭針 Pin 。

//自行定義設定地圖標籤的函式
- (void)setViewMapPin {

    //宣告一個陣列來存放標籤
    NSMutableArray *annotations = [[NSMutableArray alloc] init];

    for (int i = 1; i <= 10; i++) {

         //隨機設定標籤的緯度
         CLLocationCoordinate2D pinCenter;
         pinCenter.latitude = LATITUDE + (float)(arc4random() % 100) / 1000;
         pinCenter.longitude = LONGITUDE + (float)(arc4random() % 100) / 1000;

         //建立一個地圖標籤並設定內文
         PlacePin *annotation = [[PlacePin alloc]initWithCoordinate:pinCenter];
         annotation.title = @"Furnace Digital";
         annotation.subtitle = [NSString stringWithFormat:@"臨時作戰總部 - %i", i];

         //將製作好的標籤放入陣列中
         [annotations addObject:annotation];
         [annotation release];
    }

    //將陣列中所有的標籤顯示在地圖上
    [map addAnnotations:annotations];
    [annotations release];
}






2 則留言:

  1. 匿名5/17/2013

    請問一下,我SPAN設跟你一樣0.003可是開始畫面還是在洛杉磯的畫面,可是大頭針卻在該指定的位置,這樣要怎麼辦呢?

    回覆刪除
    回覆
    1. 您好:

      你還必須把地圖畫面的中心點移動到你所需要的位置才行。

      至於當前位置的更新你可以參考此篇:
      http://furnacedigital.blogspot.tw/2010/12/mapkit.html

      或是其他相關文章
      http://furnacedigital.blogspot.tw/search/label/M_GoogleMap


      ps:這篇文章真的很久了,現在也已經不是 google map了,但是其中的函式庫其實差異不大,如果您也同時在尋找 google map 的 api,可以參考以下這篇:
      http://furnacedigital.blogspot.tw/2012/10/classicmap-google.html

      刪除