1

以下のコードは、一意のピンと 1 つの注釈に対して完全に機能します。あまり多くの変更を加えずに、より多くのピン、場所、注釈を表示できるようにしたいと考えています。

MyAnnotationPins次の行で呼び出されるクラスがあります。

MyAnnotationPins.h

@interface MyAnnotationPins : NSObject < MKAnnotation>
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, readonly, copy) NSString *title;
@property (nonatomic, readonly, copy) NSString *subtitle;
-(id)initWithCoordinate:(CLLocationCoordinate2D)annotCoordinate title:(NSString*)annotTitle subtitle:(NSString*)annotSubtitle;

MyAnnotationPins.m

@synthesize coordinate;
@synthesize subtitle;
@synthesize title;
-(id)initWithCoordinate:(CLLocationCoordinate2D)annotCoordinate title:(NSString*)annotTitle subtitle:(NSString*)annotSubtitle
{
    self = [super init];
    if (self)
    {
        coordinate = annotCoordinate;
        subtitle = [[NSString alloc] initWithString:annotSubtitle];
        title = [[NSString alloc] initWithString:annotTitle];
    }

    return self;
}

そしてView Controllerで次のコード:

SecondViewController.h

import "MyAnnotationPins.h"


@interface SecondViewController : UIViewController < MKMapViewDelegate > 

@property (weak, nonatomic) IBOutlet MKMapView *mapView;    
@property (strong, nonatomic) MyAnnotationPins* biblioAnnotation;

SecondViewController.m での実装:

- (void)viewDidLoad
{

    [super viewDidLoad];

    mapView.delegate = self;

    MKCoordinateRegion mapRegion;
    mapRegion.center.latitude=-18.924129;
    mapRegion.center.longitude=-48.283963;
    mapRegion.span.latitudeDelta=0.2;
    mapRegion.span.longitudeDelta=0.2;

    [mapView setRegion:mapRegion animated:YES];

    ///// This is just for One annotaion/Pin on Map /////
    CLLocationCoordinate2D parliamentLocation = CLLocationCoordinate2DMake(-18.924129, -48.283963);
    biblioAnnotation = [[MyAnnotationPins alloc]
                            initWithCoordinate:parliamentLocation
                            title:@"Ponto Biblioteca"
                            subtitle:@"Taxi proximo"];
    [mapView addAnnotation:biblioAnnotation];

複数のピンと注釈が必要な場合は、以下の CLLocation インスタンスをコピーし、次の属性を変更します

CLLocationCoordinate2D secondLocation = CLLocationCoordinate2DMake(another latitude, another longitude);
secondAnnotation = [[MyAnnotationPins alloc]
                            initWithCoordinate:secondLocation
                            title:@"Second Title"
                            subtitle:@"Second subtitle"];
[mapView addAnnotation:secondAnnotation];  <code>  

3 番目、4 番目、5 番目などについても同様です。SecondViewController.h の最初のプロパティと同様に、View Controller で secondLocation プロパティを作成し、SecondViewController.m ファイルで @synthesize secondAnnotation プロパティを作成することを忘れないでください。

@property (strong, nonatomic) MyAnnotationPins* secondAnnotation;
4

1 に答える 1

0

次のようにループに追加します

for(X in Y)
{
 CLLocationCoordinate2D parliamentLocation = CLLocationCoordinate2DMake(-18.924129, -48.283963);
MyAnnotationPins* biblioAnnotation = [[MyAnnotationPins alloc]
                        initWithCoordinate:parliamentLocation
                        title:@"Ponto Biblioteca"
                        subtitle:@"Taxi proximo"];
[mapView addAnnotation:biblioAnnotation];
}

リストをループすると、それぞれの適切な座標とタイトルを取得できます。このようにして、リストを拡大または縮小でき、3 番目、4 番目、または 5 番目の注釈プロパティを追加する必要がなくなります。

于 2012-09-15T03:46:13.570 に答える