Objective c iOS中MKMapView上的自定义pin?
我已经尝试了几乎所有的方法来显示图像,而不是在我的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
-(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];