2010-08-10 2 views
0

У меня есть «мировоззрение», так сказать, состоящее из большой, масштабируемой области в UIScrollView. Я хочу, чтобы несколько кнопок сохраняли свое местоположение в мире, когда я щелкаю, чтобы масштабировать, подобно контактам в Картах Google. Код, который я пытался (я кодирование в течение нескольких часов, но я думаю, что это звучит хорошо ... хотя я могу быть просто перегорел) является:Расположение UIButton при масштабировании UIScrollView

- (void)scrollViewDidZoom:(UIScrollView *)scrollView 
{ 
    CGPoint center = button.center; 
    center.y = center.y * scrollView.zoomScale; 
    center.x = center.x * scrollView.zoomScale; 
    button.center = center; 
    NSLog(@"Button coordinates are %f, %f, zoomScale is %f", button.center.x, button.center.y, scrollView.zoomScale); 
} 

Может кто-нибудь увидеть, что я делаю неправильно?

Заранее спасибо!

ответ

2

Я решил это, установив центр CGPoint только один раз, на просмотр нагрузки, а затем вычислив новую центральную точку, основанную на исходном местоположении.

- (void)scrollViewDidZoom:(UIScrollView *)scrollView 
{ 
    CGPoint newCenter = center; //center is set at load time, and only once 
    newCenter.y = center.y * scrollView.zoomScale; //new center is calculated on original position 
    newCenter.x = center.x * scrollView.zoomScale; 
    button.center = newCenter; 

    NSLog(@"Button coordinates are %f, %f, zoomScale is %f", button.center.x, button.center.y, scrollView.zoomScale); 
} 

Извините, что заблуждался вопрос, Питер.

+0

Как вы установите «центр» во время просмотра нагрузки? Я пытаюсь сделать то же самое, что думаю. У меня есть карта размером 500x500 и пикселями 32x32. Я хочу держать контакты в 32x32 и следить за тем, чтобы они указывали на одно и то же местоположение после масштабирования. Мне трудно заставить это работать. – Arcadian

+0

Наложение второго UIScrollView на масштабирование одного и переключение касаний с одного на тот, который вы хотите увеличить. Имейте второй (масштабирование), возвращающий представление в методе делегата view() (view), и вы должны быть добры. – diatrevolo

1

Вам не нужно выполнять всю математику самостоятельно. Базовый класс UIScrollView, в UIView, имеет четыре методы для преобразования между системами координат, которые в случае UIScrollView принять масштабирование и панорамирование во внимание:

– convertPoint:toView: 
– convertPoint:fromView: 
– convertRect:toView: 
– convertRect:fromView: 

Смотрите документацию UIView на http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

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