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

zam*_*ono 13 iphone position uiscrollview uiview uislider

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

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

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

我在用:

[4thView setCenter:CGPointMake([4thView center].x, [slider center].y+10)];
Run Code Online (Sandbox Code Playgroud)

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

Aec*_*Liu 36

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

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view
Run Code Online (Sandbox Code Playgroud)

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

CGPoint aPtInScrollView = [viewA convertPoint:aPoint toView:scrollViewB]; 
Run Code Online (Sandbox Code Playgroud)

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

 CGPoint aPosViewA = [scrollViewB convertPoint:CGPointZero fromView:viewA]; 
Run Code Online (Sandbox Code Playgroud)


Nig*_*pps 5

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

如果多个 UIView 中有多个 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];
}
Run Code Online (Sandbox Code Playgroud)

如果文本视图上方有标签,只需将 x 或 y 偏移该量即可。