15

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

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

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

我在用:

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

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

4

2 回答 2

42

您可以通过 UIView 的实例方法转换积分。

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

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

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

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

 CGPoint aPosViewA = [scrollViewB convertPoint:CGPointZero fromView:viewA]; 
于 2011-01-12T00:18:23.487 回答
5

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

如果您在单个 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 偏移该数量即可。

于 2015-06-18T04:20:50.617 回答