如何在UIScrollView中获取UIView中对象的位置

时间:2011-01-11 23:44:19

标签: iphone uiview uiscrollview position uislider

所以假设我有一个UIScrollView,其中有3个UIViews,其中每个都有一个UISlider。它们垂直放置在UIScrollView中。

我现在在UIScrollView中也有第4个UIView,我想根据已经使用过的滑块的位置移动它。

所以在我传递发送者的sliderChanged方法中,我得到了滑块的位置,并将第4个UIWindow的位置调整为y。这在第一个UIView上运行得很好,但是一次在另一个强制我向下滚动的UIView上,使用滑块移动第4个UIView但是停留在UIScrollView的开头

我正在使用:

[4thView setCenter:CGPointMake([4thView center].x, [slider center].y+10)];

我需要的是获取滑块相对于scrollView内容的位置而不是相对于其UIView,以便我可以相对于scrollView内容再次设置第4个视图。

2 个答案:

答案 0 :(得分:34)

您可以通过UIView的实例方法转换点数。

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view

例如,我想将viewA上的一个ponint转换为scrollViewB的坐标。

CGPoint aPtInScrollView = [viewA convertPoint:aPoint toView:scrollViewB]; 

或者,我想知道scrollViewB中viewA的位置。

 CGPoint aPosViewA = [scrollViewB convertPoint:CGPointZero fromView:viewA]; 

答案 1 :(得分:2)

使用前面的答案,我进一步解决了我遇到的问题。

如果你在单个UIScrollView中的多个UIView中有多个UITextView:这将动画并滚动到它们。

这也可以应用于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偏移该数量。