2011-06-27 42 views
15

Có một dự án ví dụ đơn giản cho MKAnnotation không? Tôi không biết phải chuyền cái gì ở "addAnnotation", vì nó muốn một số "id<Annotation>". Các ví dụ tại trang web của nhà phát triển là tất cả với mảng hoặc phân tích cú pháp hoặc vì vậy, tôi chỉ cần một ví dụ rất dễ hiểu đầu tiên, làm thế nào toàn bộ công trình hoạt động.MKAnnotation, ví dụ đơn giản

Thanks in advance ..

EDIT:

tôi thiết lập một lớp Pin. Trong .h nó viết

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

@interface Pin : NSObject <MKAnnotation> { 
CLLocationCoordinate2D coordinate; 
NSString *title; 
NSString *subTitle; 
} 

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

- (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:(NSString *)placeName description:(NSString *)description; 
@end 

theo những gì onnoweb trả lời.

Trong Pin.m, tôi thực hiện như thế này, theo ví dụ khác nhau:

#import "Pin.h" 

@implementation Pin 

@synthesize title, subTitle; 

- (CLLocationCoordinate2D) coordinate { 
CLLocationCoordinate2D coords; 
coords.latitude = coordinate.latitude; //i want it that way 
coords.longitude = 7.1352260; //this way it works 

return coords; 

- (NSString *) title { 
return @"Thats the title"; 
} 

- (NSString *) subtitle { 
return @"Thats the sub"; 
} 

- (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:(NSString *)placeName description:(NSString *)description { 

return self; 
} 

- (void) dealloc { 
[super dealloc]; 
} 

@end 

Vì vậy, nếu tôi đặt tọa độ bằng tay, như chỉ trong các bình luận, nó hoạt động. Nhưng tôi muốn có thể thiết lập giá trị động như trong bình luận đầu tiên. Tôi đã thử nhiều cách khác nhau, nhưng không ai làm được. Vì bạn không chỉ định một số - (CLLocationCoordinate2D) coordinate Tôi đã cố gắng tổng hợp coordinate, nhưng điều đó cũng không hoạt động.

Bạn có thể cho tôi xem MapPin.m của bạn không?

EDIT 2:

tôi đặt mapCenter như

- (void)viewWillAppear:(BOOL)animated { 
self.locationManager = [[CLLocationManager alloc] init]; 
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
self.locationManager.delegate = self; 
[self.locationManager startUpdatingLocation]; 

CLLocation *curPos = locationManager.location; 
location = curPos.coordinate; 

CLLocationCoordinate2D mapCenter; 
mapCenter.latitude = location.latitude; 
mapCenter.longitude = location.longitude; 

MKCoordinateSpan mapSpan; 
mapSpan.latitudeDelta = 0.005; 
mapSpan.longitudeDelta = 0.005; 

MKCoordinateRegion mapRegion; 
mapRegion.center = mapCenter; 
mapRegion.span = mapSpan; 

mapKitView.region = mapRegion; 
mapKitView.mapType = MKMapTypeStandard; 
mapKitView.showsUserLocation=TRUE; 
} 

Bất cứ điều gì sai với điều đó?

Trả lời

34

Bạn cần có lớp học triển khai giao thức MKAnnotation. Dưới đây là một đoạn trích từ một trong những dự án của tôi:

@interface MapPin : NSObject<MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    NSString *title; 
    NSString *subtitle; 
} 

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

- (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:(NSString *)placeName description:(NSString *)description; 

@end 

Sau đó, nơi bạn tạo bản đồ bạn sẽ gọi:

pin = [[MapPin alloc] initWithCoordinates:[track startCoordinates] placeName:@"Start" description:@""]; 
[map addAnnotation:pin]; 

EDIT:

đây là việc thực hiện:

@implementation MapPin 

@synthesize coordinate; 
@synthesize title; 
@synthesize subtitle; 

- (id)initWithCoordinates:(CLLocationCoordinate2D)location placeName:placeName description:description { 
    self = [super init]; 
    if (self != nil) { 
     coordinate = location; 
     title = placeName; 
     [title retain]; 
     subtitle = description; 
     [subtitle retain]; 
    } 
    return self; 
} 

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


@end 

Hy vọng điều này sẽ giúp, Onno.

+0

Cảm ơn, điều đó đã giúp khá nhiều. Giống như tôi mới làm gì với google, và bắt đầu chạy, nhưng tôi không hiểu lắm. Vui lòng xem câu hỏi được cập nhật của tôi cho mã tôi có cho đến nay. Tôi không biết những gì .m nên trông giống như .. – Nareille

+0

Xem câu trả lời đã chỉnh sửa của tôi. – onnoweb

+0

Cảm ơn, điều đó đã giúp một lần nữa :) Một câu hỏi cuối cùng cho một số hành vi lạ: Tôi không định nghĩa một cái gì đó như "phối hợp" trong của tôi. H, nhưng Xcode nói với tôi rằng tôi cần phải tổng hợp nó. Nếu tôi làm như vậy, mapCenter của tôi sẽ bị dịch chuyển khoảng vài trăm mét về phía tây. Nếu tôi vượt qua tổng hợp, nó tập trung lại một cách thích hợp. Làm thế nào để thoát khỏi cảnh báo? – Nareille

Các vấn đề liên quan