#iphone #ios #mkmapview #mapkit
#iPhone #iOS #mkmapview #mapkit
Вопрос:
Кажется, я не могу изменить цвет pin-кода.
У меня есть свой контроллер просмотра, который я расширяю <MKMapViewDelegate>
и реализую mapView:viewForAnnotation
, я близок, но, должно быть, чего-то не хватает. любая помощь будет оценена.
MainViewController.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import "StopAnnotation.h"
#define METERS_PER_MILE 1609.344
@interface MainViewController : UIViewController <MKMapViewDelegate> {
}
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end
MapViewController.m
#import "MainViewController.h"
@implementation MainViewController
@synthesize mapView=_mapView;
- (void)viewWillAppear:(BOOL)animated
{
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = 43.066667;
zoomLocation.longitude = -89.4;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, METERS_PER_MILE, METERS_PER_MILE);
MKCoordinateRegion adjustRegion = [_mapView regionThatFits:viewRegion];
[_mapView setRegion:adjustRegion animated:YES];
[_mapView addAnnotation:[[StopAnnotation alloc] initWithCoordinate:zoomLocation]];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
MKPinAnnotationView *pav = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
pav.pinColor = MKPinAnnotationColorPurple;
return pav;
}
// the rest of the methods are default, i.e. viewDid* and shouldAutorotate*, etc...
StopAnnotation.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface StopAnnotation : NSObject <MKAnnotation> {
CLLocationCoordinate2D coordinate;
NSString *title;
NSString *subtitle;
}
- (id)initWithCoordinate:(CLLocationCoordinate2D)c;
@end
StopAnnotation.m
#import "StopAnnotation.h"
@implementation StopAnnotation
@synthesize coordinate;
- (NSString *)subtitle {
return @"subtitle";
}
- (NSString *)title {
return @"title";
}
- (id)initWithCoordinate:(CLLocationCoordinate2D)c {
coordinate = c;
NSLog(@"%f,%f", c.latitude, c.longitude);
return self;
}
@end
Я выполняю упражнение, и код был в основном отсюда
Спасибо!!
Комментарии:
1. @jbat100 да, они все еще красные: (
Ответ №1:
Вы должны установить MainViewController в качестве делегата MapView, т.Е. Если вы этого не сделаете, то вид карты может генерировать выводы по умолчанию, если вы введете точку останова
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
действительно ли это вызывается?
Комментарии:
1. Вы правы. похоже, он не вызывается. Как бы мне настроить делегат (и в каком классе)?
2. ха-ха, я сделал это в раскадровке, и это работает! Большое спасибо! Данные раскадровки когда-либо записывались в коде или только во внутренних данных?
3. в MainViewController viewDidLoad: установите делегат, выполнив MapView.delegate = self; Вам необходимо объявить MainViewController как соответствующий протоколу MKMapViewDelegate, чтобы отключить предупреждения компилятора.
4. _mapView.delegate = self; исправил бы это