/ / MKMapView ignora a atualização do centerOffset no iOS 4 - iphone, mkmapview, ios4, mkannotationview

O MKMapView ignora a atualização do centerOffset no iOS 4 - iphone, mkmapview, ios4, mkannotationview

Eu criei anteriormente uma bolha de chamada personalizada comoSubview para o MKAnnotationView porque o texto explicativo interno é tão limitado. Isso requer que eu mude para centerOffset do MKAnnotationView quando ele é selecionado para considerar o tamanho da bolha de chamada. Isso tudo funcionou perfeitamente antes do iOS 4 sair. Agora, com o iOS 4, ele ignora completamente minha atualização da propriedade centerOffset e, portanto, o pino e a bolha aparecem para pular para baixo e para a direita (o canto superior esquerdo da bolha de texto explicativo agora está no local onde o ponto de pin deve estar) .

Alguém sabe por que isso mudou no iOS 4? Existe algo que eu possa fazer para que o MKMapView reconheça o novo centerOffset? Isso é um bug que a Apple introduziu?

Obrigado pela ajuda!

Respostas:

6 para resposta № 1

Certifique-se de estar usando MKAnnotationView e não MKPinAnnotationView! Você não pode definir o centerOffset de um MKPinAnnotationViewObjeto (exceto se você subclasse é claro).


4 para resposta № 2

Eu tenho o mesmo problema - centerOffset parece ser levado em conta apenas na primeira vez. Ele é alterado internamente, mas a visualização não é movida - então, o que você precisa fazer é mover a visualização.

Você pode mover a vista ajustando seu centrocom o deslocamento necessário - a visualização selecionada permanece alinhada no canto superior esquerdo com a exibição não selecionada, portanto, é necessário realinhar seus centros. Aqui está o meu caso:

Selecionado -> Desmarcado:

self.center = CGPointMake(self.center.x + 56.0, self.center.y + 130.0);
self.centerOffset = CGPointMake(5.0, -14.0);

Desmarcado -> Selecionado:

self.center = CGPointMake(self.center.x - 56.0, self.center.y - 130.0);
self.centerOffset = CGPointMake(64.0, -81.0);

Onde 130 é a diferença de altura entre as visualizações (o ponto central está na parte inferior) e 56 é a diferença entre os deslocamentos X de seus centros.

Lembre-se - você ainda precisa alterar o deslocamento do centro, porque ele será levado em conta quando o zoom.

Espero que isso ajude, eu perdi algumas horas sobre isso. Lembre-se de enviar um relatório de bug para a Apple.


0 para resposta № 3

Eu acho que em vez de centerOffset você pode usar setRegion que funciona bem em todas as versões.

CGPoint point = [mapView convertCoordinate:selectedAnnotation.coordinate toPointToView:self.view];

CGRect frame = [customView frame];
frame.origin.y = point.y - frame.size.height;
frame.origin.x = point.x - frame.size.width / 2;

MKCoordinateRegion region = [mapView convertRect:frame toRegionFromView:self.view];
[mapView setRegion:region animated:YES];