Z-упорядочивание MKAnnotationViews

голоса
13

Я получаю довольно разочарование в связи с ограничениями MKMapKit. Моя текущая проблема связана с г-упорядоченностью вида аннотаций, в частности, как он относится к прикосновениям. Если вы принимаете по умолчанию Z-Орден MapKit дает вам:

  1. Порядок появляется случайным образом. Г порядка не имеет отношения к порядку были добавлены аннотации.
  2. Если один аннотация заканчивается на вершине другой, прикоснувшись к верхней аннотации обычно вызывает выноски для нижней аннотации. Похоже, хит детектирование даже не уважает порядок отрисовки. Что с этим делать?

Я попытался решить # 1, используя что-то подобное следующему код найденного в Интернете (который был разработан, чтобы дать некоторый контроль над г-го порядка)

- (Недействительными) MAPview: (MKMapView *) MAPview didAddAnnotationViews: (NSArray *) вид {
   для (MKAnnotationView * annView в представлениях) {
      TopBottomAnnotation * апп = (TopBottomAnnotation *) [annView аннотаций];
      если ([апп сверху]) {
         [[AnnView SuperView] bringSubviewToFront: annView];
      } Еще {
         [[AnnView SuperView] sendSubviewToBack: annView];
      }
   }

}

Запуск через представление аннотаций, переданное MAPview: didAddAnnotationViews: и регулируя их Z-порядок, похоже, исправить # 1. Проблема заключается в том, что сейчас взгляды выноски больше не всегда сверху взгляды аннотаций. MapKit, кажется, становится очень смущен о слоях (выноски должны быть нарисованы в слое над всеми видами аннотаций). Я даже могу понять, как это путается, так как все MKAnnotationViews вы получаете имеют одинаковую SuperView (частный класс MKOverlayView). Вы думаете, что любой разумный дизайн будет рисовать выноски об этом виде наложения.

Кто-нибудь решил # 1 или # 2 успешно?

Задан 05/11/2009 в 17:04
источник пользователем
На других языках...                            


3 ответов

голоса
8

Если у вас есть собственный annotationView (который звучит, как у вас уже есть), вы можете попробовать добавить следующее:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [self.superview bringSubviewToFront:self];
    [super touchesBegan:touches withEvent:event];
}

Побочным эффектом является то, что каждый раз, когда маркер коснулся также появляется на передней части г-го порядка, который на самом деле является разумным, так это то, что пользователь делает упор на.

Ответил 05/11/2009 в 17:54
источник пользователем

голоса
7

Рамин, который идеально подходит для того, что я пытаюсь сделать. У меня не было представления пользовательских аннотаций, определенный, хотя. Я решил эту проблему с помощью категории, и она работала отлично!

Вот заголовок:

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h>


@interface MKPinAnnotationView (ZIndexFix)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
@end

И реализация:

#import "AEBMapViewCategory.h"
@implementation MKPinAnnotationView (ZIndexFix)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [self.superview bringSubviewToFront:self];
    [super touchesBegan:touches withEvent:event];
}
@end
Ответил 04/12/2009 в 19:40
источник пользователем

голоса
6

Попробуйте zPosition другого решения, настройка аннотации зрения слоя (annotationView.layer.zPosition) в:

(Аннулируются) MAPview: (MKMapView *) MAPview didAddAnnotationViews: (NSArray *) мнения;

Ответил 03/05/2013 в 12:12
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more