Я не знаю никаких других шаблонов, но это не значит, что их не существует.:)
В любом случае, вот как создать пользовательские: Создайте новый класс, соответствующий протоколу 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;
}