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

Iphone 如何在UIView、UIScrollView中获取对象的位置,iphone,uiview,uiscrollview,position,uislider,Iphone,Uiview,Uiscrollview,Position,Uislider,假设我有一个UIScrollView,其中有3个UIView,其中每个都有一个UISlider。它们在UIScrollView中垂直放置 我现在在UIScrollView中还有一个第四个UIView,我希望根据已使用的滑块的位置来移动它 因此,在我传递发送器的sliderChanged方法中,我得到了滑块的位置,并将第四个UIWindow的位置调整为y。这在第一个UIView上非常有效,但在另一个UIView上,它迫使我向下滚动,使用滑块移动第四个UIView,但停留在UIScrollView的

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

我现在在UIScrollView中还有一个第四个UIView,我希望根据已使用的滑块的位置来移动它

因此,在我传递发送器的sliderChanged方法中,我得到了滑块的位置,并将第四个UIWindow的位置调整为y。这在第一个UIView上非常有效,但在另一个UIView上,它迫使我向下滚动,使用滑块移动第四个UIView,但停留在UIScrollView的开头

我正在使用:

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

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

您可以通过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]; 
或者,我想知道viewA在scrollViewB中的位置

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

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

如果在多个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];
}

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

谢谢,经过大量研究后,我实现了这一点,它与您的代码CGPoint sliderPoint=[[slider superview]convertPoint:[slider center]toView:scrollView]相同;[4thView setCenter:CGPointMake([4th center].x,sliderPoint.y-20)];(CGPoint)convertPoint:(CGPoint)point to view:(UIView*)view是否考虑到第二个视图中是否存在类似缩放的转换,如果没有,如何进行类似的转换不,我认为这些方法不会考虑任何转换。还有其他方法可以通过变换来计算点。还有什么其他方法呢?我试图计算视图控制器视图中UITableView(UIScrollView)中UIButton的点。convertPoint方法似乎给出了滚动视图中的位置,但我试图获得可见的坐标位置。编辑:没关系,我发现我是在转换到滚动视图的坐标,而不是滚动视图的父视图(即可见区域)。出于某种原因,我直接使用该点时遇到问题,需要将其包装在CGPointMake(aPoint.x,aPoint.y)中。这实际上帮助我弄清楚了我需要什么,滚动到滚动视图中单击的按钮