Intereting Posts

выноска аннотации пользовательских карт – как управлять шириной

Я успешно внедрил пользовательский код выписки из аннотации из сообщения в асинхронном блоге . (Когда пользователь отбирает вывод карты, я показываю настроенное изображение вместо стандартного вида выноски).

Единственная оставшаяся проблема заключается в том, что выноска занимает всю ширину представления, и приложение будет выглядеть намного лучше, если ширина соответствует изображению, которое я использую.

Скриншот

Я подклассифицировал MKAnnotationView, и когда я установил его contentWidth в ширину изображения, треугольник не всегда указывает на вывод, или изображение даже не внутри его представления оболочки. Изображения ошибочны

Любая помощь или предложения были бы замечательными. Благодарю.

Solutions Collecting From Web of "выноска аннотации пользовательских карт – как управлять шириной"

Я столкнулся с аналогичной проблемой при реализации CalloutMapAnnotationView для iPad. В принципе, я не хотел, чтобы версия iPad занимала всю ширину mapView.

В методе prepareFrameSize задайте свою ширину:

 - (void)prepareFrameSize { // ... // changing frame x/y origins here does nothing frame.size = CGSizeMake(320.0f, height); self.frame = frame; } 

Затем вам нужно будет рассчитать xOffset, основанный на parentAnnotationView:

 - (void)prepareOffset { // Base x calculations from center of parent view CGPoint parentOrigin = [self.mapView convertPoint:self.parentAnnotationView.center fromView:self.parentAnnotationView.superview]; CGFloat xOffset = 0; CGFloat mapWidth = self.mapView.bounds.size.width; CGFloat halfWidth = mapWidth / 2; CGFloat x = parentOrigin.x + (320.0f / 2); if( parentOrigin.x < halfWidth && x < 0 ) // left half of map xOffset = -x; else if( parentOrigin.x > halfWidth && x > mapWidth ) // right half of map xOffset = -( x - mapWidth); // yOffset calculation ... } 

Теперь в drawRect:(CGRect)rect перед тем, как вычерчивается пузырь drawRect:(CGRect)rect :

 - (void)drawRect:(CGRect)rect { // ... // Calculate the carat lcation in the frame if( self.centerOffset.x == 0.0f ) parentX = 320.0f / 2; else if( self.centerOffset.x < 0.0f ) parentX = (320.0f / 2) + -self.centerOffset.x; //... } 

Надеюсь, это поможет вам на правильном пути.