2013-05-30 4 views
1

У меня есть сценарий, где мне нужно реализовать концепцию автономной карты, для которой я использую изображение карты на UIScrollView, которое масштабирует PinchGesture, что отлично работает.Позиция UIButton в то время как UIImage увеличить на UIScrollView

Проблема

У меня есть UIButton на карте. При масштабировании кнопка не отслеживает свою позицию относительно UIImageView, которая масштабируется. Я могу переделать кнопку без ущерба для ее размера. Но позиция неверна.

TLDR, мне нужно воспроизвести MAPview с аннотациями любопытного понятием на UIScrollView с UIImage на нем. Может ли кто-нибудь помочь?

Заранее спасибо :)

+0

добавляет UIButton на UIImageView? – IronMan

+0

@IronMan: его изображение поверх, но внутри scrollView в иерархии – Meera

ответ

2

Я нашел ответ для этого. Сначала я сохранил значение кнопки в исходном блоке CGRectButtonFrame. Затем я обновил рамку кнопки (только корни, а не размер размера кнопки, как я хотел кнопки, чтобы не увеличить, как то есть изображения, кнопка я не должна изменить масштаб изображения), используя Scrollview делегат

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale 
{ 
    [self manageImageOnScrollView];//here i managed the image's coordinates and zoom 
    [self manageButtonCoordinatesWithRespectToImageWithScale:scale]; 
} 

-(void)manageButtonCoordinatesWithRespectToImageWithScale:(float)scaleFactor 
{ 

//initialButtonFrame is frame of button 
    self.button.frame = CGRectMake((initialButtonFrame.origin.x * scaleFactor), 
            (initialButtonFrame.origin.y * scaleFactor), 
              initialButtonFrame.size.width, 
              initialButtonFrame.size.height); 

    [self.scrollView addSubview:self.button];// I removed the button from superview while zooming and later added with updated button coordinates which I got here 
} 
+0

Это не работает для меня .. Когда я пытаюсь применить шкалу к происхождению кнопки. Происхождение снимается до более высокого значения в зависимости от скорости пинча. Выход из границ видимого экрана. :( –

+0

Правильно ли вы вычисляете масштабный коэффициент? – Meera

+0

Выяснилось, пришлось сделать некоторую математику и некоторые отладки, phhewww .. :) Спасибо, что ответили. –

0

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

//Assuming your map image has its origin at 0, 0 
CGPoint mapOffsetX, mapOffsetY; // these would come from your map as you calculated it. 
CGPoint mapZoomFactor; // 1.0 means not zoomed, 3.0 means zooming in 3x, etc 
CGPoint buttonAnchorPosition; //the position of your button on your map at 1.0 zoom 

CGFloat buttonX = buttonAnchorPosition.x * mapZoomFactor + mapOffsetX; 
CGFloat buttonY = buttonAnchorPosition.y * mapZoomFactor + mapOffsetY; 

CGPoint buttonPosition = CGPointMake(buttonX, buttonY); 

button.position = buttonPosition; 

Try что, удачи

+0

: Спасибо. Но как вычислить mapOffsetX, mapOffsetY? – Meera

+0

смещение не может быть найдено по карте, потому что я не использую карту. Я использую scrollview и изображение с кнопкой на нем. – Meera

Смежные вопросы