Подклассы MKAnnotationView - PullRequest
       6

Подклассы MKAnnotationView

5 голосов
/ 22 октября 2010

Мне было интересно, если кто-нибудь знает какие-либо подклассы для класса MKAnnotationView. В документации на яблоки говорится, что одним примером является MKPinAnnotationView, поэтому мне было интересно, были ли другие предварительно созданные подклассы, такие как тот, который использовался для отслеживания текущего местоположения устройств. Если у кого-то есть советы по созданию моего собственного подкласса класса MKAnnotationView, то это тоже здорово.

Спасибо, bubster

Ответы [ 2 ]

9 голосов
/ 29 апреля 2011

На случай, если кто-то еще заинтересован в этом:

Вы можете получить все подклассы класса, используя функции времени выполнения Objective C, как описано здесь: http://cocoawithlove.com/2010/01/getting-subclasses-of-objective-c-class.html

Другие классы, которые наследуются от MKAnnotationView:

MKTransitCalloutView, MKAdAnnotationView, MKUserLocationView, MKUserLocationBreadCrumbView и MKPinAnnotationView

где MKPinAnnotationView является единственным документально подтвержденным. Все остальные являются закрытыми классами, которые Apple использует для внутреннего использования.

7 голосов
/ 22 октября 2010

Я не знаю никаких других шаблонов, но это не значит, что их не существует.:)

В любом случае, вот как создать пользовательские: Создайте новый класс, соответствующий протоколу MKAnnotation.Вам понадобятся две переменные экземпляра типа NSString* с именами title и subtitle и одна с типом CLLocationCoordinate2D с именем координата и соответствующий метод установки (например, свойство).Эти строки будут отображаться в выноске.В делегате вашего mapView реализуйте метод -mapView:viewForAnnotation: аналогично тому, как вы реализуете источник данных для UITableView.То есть, снятие аннотации ViewView с помощью идентификатора, установка новых свойств (например, кнопки типа UIButtonTypeDetailDisclosure для правого дополнительного представления).Вы хотите добавить изображение для отображения под смещением.Просто используйте свойство image вашего MKAnnotationView.Центр вашего пользовательского изображения будет расположен в указанной координате, поэтому вы можете задать смещение: aView.centerOffset = CGPointMake(0, -20)

Вот пример кода:

- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id<MKAnnotation>) annotation {
    // reuse a view, if one exists
    MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];

    // create a new view else
    if (!aView) {
        aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"];
    }

    // now configure the view
    aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [(UIButton*)aView.rightCalloutAccessoryView addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
    aView.canShowCallout = YES;
    aView.enabled = YES;
    aView.image = [UIImage imageNamed:@"green_pin.png"];
    aView.centerOffset = CGPointMake(0, -20);

    return aView;
}
...