Pergunta

Tenho um mapa com vários pinos (2 tipos de pinos).Eu lhes peço que tenham um timer como legenda (quanto tempo se passou desde alguma coisa).O problema é que não tenho certeza de como fazer isso.Certamente o timer deve ser colocado no viewController com mapView.Então provavelmente algum observador se contentou com anotações...Mas neste conceito onde remover o observador e onde definir a ação para as mudanças dos observadores..?Ou talvez haja algum conceito melhor?Obrigado por qualquer resposta.

Foi útil?

Solução

Eu faria minha própria classe MKAnnotation.

@interface MyAnnotation : NSObject <MKAnnotation> {
    CLLocationCoordinate2D _coordinate;
    NSMutableString * title;
    NSMutableString * subtitle;
    ...
    UIImage * pinImage;
    ...
    NSDate * startTime;
}

Essa aula teria um NSDate * startTime como propriedade e um método refreshTime, que compara a hora atual ([NSDate date]) e exibir na legenda o tempo decorrido.

Então você só precisa atualizar as anotações dos seus mapas

for(MyAnnotation * annotation in [mapView annotations]) {
    if([annotation isKindOfClass:[MyAnnotation class]]) // important cause the user centered blue point is part of your annotation list!
        [annotation refreshTime];
}

Agora a questão é:quando você deseja atualizar?

Você pode usar um cronômetro que atualiza a cada n segundos, por exemplo, ou iniciar a atualização em ViewDidAppear...Depende do que você quer fazer !

Editar:

Se você deseja atualizar a seleção de anotações, talvez você possa criar sua própria subclasse AnnotationView de MKAnnotationView.

Em seguida, no seu AnnotationView, substitua o touchesBegan:withEvent: ou touchesEnded:withEvent: para enviar a atualização.

Não testei, mas tenho certeza que funcionaria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top