Objective c iOS中MKMapView上的自定义pin?

Objective c iOS中MKMapView上的自定义pin?,objective-c,annotations,Objective C,Annotations,我已经尝试了几乎所有的方法来显示图像,而不是在我的MKMapView上显示默认的红色pin 关于这个问题,互联网上有很多答案,但他们都一直给我这样的答案: -(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释 { if([annotation isKindOfClass:[MKUserLocation类]]) 返回零; NSString*annotationIdentifier=@“CustomViewAnnotation”; MKAnnotat

我已经尝试了几乎所有的方法来显示图像,而不是在我的MKMapView上显示默认的红色pin

关于这个问题,互联网上有很多答案,但他们都一直给我这样的答案:


-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释
{
if([annotation isKindOfClass:[MKUserLocation类]])
返回零;
NSString*annotationIdentifier=@“CustomViewAnnotation”;
MKAnnotationView*annotationView=[mapview dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
如果(!annotationView)
{
annotationView=[[MKAnnotationView alloc]initWithAnnotation:annotation
reuseIdentifier:annotationIdentifier]];
}
annotationView.image=[UIImage ImageName:@“map\u location\u pin.png”];
annotationView.canShowCallout=是;
返回注释视图;
}

这对我一点帮助都没有,从表面上看,这只是一种方法

请告诉我如何使用它使方法返回带有自定义图像的注释。 几乎所有其他的答案都告诉我实现这个方法,没有进一步的解释

我该把它叫哪里?我怎么称呼它?


谢谢

我自己解决了这个问题,下面是我在4个步骤中所做的:

步骤1:必须将mapview的代理设置为ViewController:

MapViewController.h


步骤2:实现方法:

MapViewController.m

第4步:添加注释您将拥有自定义图像

MapViewController.m


我希望这有帮助

上面的方法是MapView的委托方法。您不断得到答案的原因是,这就是您为pin设置自定义图像的方式。仅当添加了mapview并设置了代理时,才会调用一次。我建议您遵循这样的教程。这将帮助您理解MapView和委托方法是如何工作的。重新表述Adam的答案,您的MapView的委托需要实现该方法。视图控制器通常被用作MapView的委托。我仍然在犹豫,我对iOS还很陌生,但对于实现方法需要做些什么,我有很好的理解,但是实现一个充当委托的方法似乎不像我想象的那么简单。你知道有什么循序渐进的教程吗?或者你能给我举个例子说明我将如何做到这一点吗?我非常感谢你的回答。我经历了同样的痛苦,因为我无法找到一个完美的例子。你的代码帮了我很大的忙。这个代码很“有效”,但并不完美。首先,您应该使用可重用标识符将注释视图出列,这样就不会一直为所有管脚分配该注释(类型)的视图。对于注释数量少的情况,这不是一个问题,但是如果您有包含许多注释的复杂视图,那么您的性能也可能会受到影响。干杯
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    NSString *annotationIdentifier = @"CustomViewAnnotation";
    MKAnnotationView* annotationView = [mapview dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
    if(!annotationView)
    {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                      reuseIdentifier:annotationIdentifier]];
    }
    annotationView.image = [UIImage imageNamed:@"map_location_pin.png"];
    annotationView.canShowCallout= YES;

    return annotationView;
}
 @interface MapViewController : UIViewController <MKMapViewDelegate> {
        IBOutlet MKMapView *mapView;
    }
@property (nonatomic, nonatomic) IBOutlet MKMapView *mapView;
- (void)viewDidLoad
{    
    [super viewDidLoad];
    [mapView setDelegate:self];
}
-(MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    MKPinAnnotationView *MyPin=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"current"];
    //MyPin.pinColor = MKPinAnnotationColorPurple;

UIButton *advertButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[advertButton addTarget:self action:@selector(button:) forControlEvents:UIControlEventTouchUpInside];

/*MyPin.rightCalloutAccessoryView = advertButton;
 MyPin.draggable = YES;

 MyPin.animatesDrop=TRUE;
 MyPin.canShowCallout = YES;*/
MyPin.highlighted = NO;
MyPin.image = [UIImage imageNamed:@"myCustomPinImage"];

return MyPin;
}
#import <Foundation/Foundation.h>
#import <MapKit/MKAnnotation.h>

@interface Annotation : NSObject <MKAnnotation> {

    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;

}

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

@end
#import "Annotation.h"

@implementation Annotation
@synthesize coordinate, title, subtitle;

@end
MKCoordinateRegion Bridge = { {0.0, 0.0} , {0.0, 0.0} };
        Bridge.center.latitude = [[[testArr objectAtIndex:updates] objectAtIndex:1] floatValue];
        Bridge.center.longitude = [[[testArr objectAtIndex:updates] objectAtIndex:0] floatValue];
        Bridge.span.longitudeDelta = 0.01f;
        Bridge.span.latitudeDelta = 0.01f;

        Annotation *ann = [[Annotation alloc] init];
        ann.title = @"I'm a pin";
        ann.subtitle = @"Your subtitle";
        ann.coordinate = Bridge.center;
        [mapView addAnnotation:ann];