2012-04-24 2 views
0

У меня есть UIScrollView с меткой. Я получаю координаты событий касания. Когда пользователь нажимает на экран, я сохраняю координаты кликов в переменной, тогда я хочу прокрутить представление (используя что-то вроде [myScrollView setContentOffset]) таким образом, чтобы координата y щелкнувшей точки стала центром моего представления , поэтому, когда вы нажимаете на какой-либо текст, он будет автоматически прокручиваться в центр экрана. Я не уверен, как тренировать математику этого ...прокрутка щелкнула по центру экрана в UIScrollView

Любая помощь высоко оценена!

ответ

3
UIScrollView *aScrollView;  
CGPoint touchPoint; 
[aScrollView scrollRectToVisible:CGRectMake(touchPoint.x - roundf(aScrollView.frame.size.width/2.), 
                touchPoint.y - roundf(aScrollView.frame.size.height/2.), 
                aScrollView.frame.size.width, 
                aScrollView.frame.size.height) 
                animated:YES]; 

Должно работать.

+0

благодаря Кай, это работает. Еще есть проблема: первый раз, когда вы нажимаете на какой-либо текст, он будет прокручиваться до центра, чего я хотел. Но если вы снова нажмете его (пока он останется в центре экрана), он вернется к предыдущей позиции ... – izaslavs

+0

Звучит странно. Возможно, вы не держите/не храните точку касания правильно. Опубликуйте код (возможно, в другом вопросе). –

+0

@KaiHuppmann этот код работает идеально. Спасибо. Но ты можешь мне помочь. Это не работает при масштабировании прокрутки. Можете ли вы мне помочь в применении коэффициента масштабирования здесь? –

0

Мое решение очень похоже, но я использую шкалу, и я хочу центрировать точку зрения, а не точку касания. Поэтому мне нужно сначала вычислить центр.

Мой окончательный код:

UIView *view; //View to center 
UIScrollView *scrollView; //scroll view 

CGPoint point = CGPointMake(view.frame.origin.x + view.frame.size.width/2, 
          view.frame.origin.y + view.frame.size.height/2); 

CGRect rectToZoom = CGRectMake(point.x * scrollView.zoomScale - roundf(scrollView.frame.size.width /2.), 
           point.y * scrollView.zoomScale - roundf(scrollView.frame.size.height /2.), 
           scrollView.frame.size.width, 
           scrollView.frame.size.height); 

[scrollView scrollRectToVisible:rectToZoom animated:YES]; 
Смежные вопросы