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 № 1Certifique-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];