2013-04-22 4 views
2

iPhone новичок здесь, пришедший из Java. Таким образом, моя цель на этом этапе - позволить пользователю «опустить булавку» на карту. Моя инициализация карты выглядит следующим образом:Капля булавки на MKMapView

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSLog(@"your view did load, I'm going to initizlie the map by your location"); 
    CLLocationCoordinate2D location = theMap.userLocation.coordinate; 
    NSLog(@"Location found from Map: %f %f",location.latitude,location.longitude); 

    MKCoordinateRegion region; 
    MKCoordinateSpan span; 

    NSLog(@"coordinates: %f %f",location.latitude,location.longitude); 
    if (TARGET_IPHONE_SIMULATOR) { 
     NSLog(@"You're using the simulator:"); 
     location.latitude = 40.8761620; 
     location.longitude = -73.782596; 
    } else { 
     location.latitude = theMap.userLocation.location.coordinate.latitude; 
     location.longitude = theMap.userLocation.location.coordinate.longitude; 
    } 

    span.latitudeDelta = 0.001; 
    span.longitudeDelta = 0.002; 

    region.span = span; 
    region.center = location; 

    [theMap setRegion:region animated:YES]; 
    [theMap regionThatFits:region]; 
    [theMap setMapType:MKMapTypeSatellite]; 
    [theMap setZoomEnabled:YES]; 
    [theMap setScrollEnabled:YES]; 
    [theMap setShowsUserLocation:YES]; 
} 

Для запрошенного падения контактного У меня есть

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation { 
    MKPinAnnotationView *pinView = nil; 
    if (annotation != theMap.userLocation) { 
     static NSString *defaultPinID = @"aPin"; 
     pinView = (MKPinAnnotationView *)[theMap dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
    if (pinView == nil) 
     pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; 
    } else { 
    } 
    pinView.pinColor = MKPinAnnotationColorRed; 
    pinView.canShowCallout = YES; 
    pinView.animatesDrop = YES; 
    return pinView; 
} 

Я не уверен, я полностью понимаю, как эта карта (theMap) работает для бойков в viewForAnnotation? Я имею в виду, какое действие пользователь сделает, активирует метод viewForAnnotation? Этот код не работает, и я не уверен, почему.

Я использую симулятор, поэтому я не уверен, есть ли кнопка, которую я должен нажать или Alt click?

+0

http://stackoverflow.com/questions/6410798/annotation-on-the-map-problem/6411217#6411217 – rptwsthi

ответ

1

нормально, через некоторое время, я понял, что пошло не так:

theMap.delegate = (id) self; 

в конструкторе отсутствует. Как только я это сделал, любое действие конечного пользователя активирует другие методы (протоколы) карты.

2

Я не уверен, что полностью понимаю, как эта карта (theMap) работает для контактов в viewForNnotation?

MKPinAnnotationView это просто еще один вид пояснительном - то есть, вы добавить аннотацию (объект в соответствии с протоколом MKAnnotation) на карте. Когда карта хочет отобразить аннотацию (возможно, потому, что пользователь прокрутил карту, чтобы просмотреть аннотацию), она запрашивает у вас представление для представления аннотации. В этот момент ваш метод mapView:viewForAnnotation: может получить или создать представление аннотации булавки и вернуть его. Пользователь ничего не делает, чтобы вызвать mapView:viewForAnnotation:, за исключением прокрутки или масштабирования.

Если вы хотите, чтобы пользователь был в состоянии drop a pin, это другая вещь. Вам нужно будет предоставить представление (возможно, даже MKPinAnnotationView), которое они могут перетащить. Когда они указывают, что они хотят сбросить булавку (возможно, подняв палец), вы удалите представление и добавьте соответствующую аннотацию в этот момент. Затем вид карты будет запрашивать представление для представления аннотации, вызвав метод его делегата mapView:viewForAnnotation:.

Этот код не работает, и я не уверен, почему.

Вы добавили какие-либо аннотации на карту? Если да, смотрите ли вы на ту часть карты, где они должны отображаться?

Я предполагаю, что вы смотрите на объект animatesDrop и ожидаете, что он сделает все возможное взаимодействие с пользователем. Это не так. Установка этого свойства в YES просто анимирует булавку, как она появляется на карте.

Смежные вопросы