Как получить позицию объекта в UIView, в UIScrollView
так что скажем, что у меня есть UIScrollView, внутри него есть 3 UIViews, внутри которых есть UISlider в каждом из них. они позиционируются вертикально в UIScrollView.
Теперь у меня есть 4-й UIView в UIScrollView, который я хочу перемещать в зависимости от положения ползунка, который был использован.
поэтому в моем методе sliderChanged, который я передаю отправителю, я получаю положение ползунка и настраиваю положение четвертого UIWindow на его y. Это отлично работает на первом UIView, но один раз на другом UIView, который заставил меня прокручивать вниз, использование слайдера перемещает 4-й UIView, но остается в начале UIScrollView
Я использую:
[4thView setCenter:CGPointMake([4thView center].x, [slider center].y+10)];
мне нужно получить положение ползунка относительно содержимого scrollView, а не относиться к его UIView, чтобы я мог снова установить 4-й вид относительно содержимого прокрутки.
Ответы
Ответ 1
Вы можете конвертировать точки с помощью методов экземпляра UIView.
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view
Например, я хочу преобразовать ponint в viewA в координаты scrollViewB.
CGPoint aPtInScrollView = [viewA convertPoint:aPoint toView:scrollViewB];
Или, я хочу знать положение viewA в scrollViewB.
CGPoint aPosViewA = [scrollViewB convertPoint:CGPointZero fromView:viewA];
Ответ 2
Используя предыдущий ответ, я принял его немного дальше, чтобы решить вопрос, который у меня был.
Если у вас несколько UITextView внутри нескольких UIView внутри внутри одного UIScrollView: это будет оживлять и прокручивать их.
Это также можно применить и к UITextField.
-(void)textViewDidBeginEditing:(UITextView *)textView {
[self.theScrollView setContentOffset:[self.theScrollView convertPoint:CGPointMake(textView.frame.origin.x, textView.frame.origin.y) fromView:textView.superview] animated:YES];
}
Если у вас есть надписи над вашими текстовыми полями, просто смещайте x или y на эту сумму.