【问题标题】:how to get the position of an object within a UIView, within a UIScrollView如何在 UIScrollView 中获取对象在 UIView 中的位置
【发布时间】:2011-01-11 23:44:19
【问题描述】:

假设我有一个 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 个视图。

【问题讨论】:

    标签: iphone uiview uiscrollview position uislider


    【解决方案1】:

    您可以通过 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]; 
    

    【讨论】:

    • 谢谢,经过大量研究后,我实现了这与您的代码相同 CGPoint sliderPoint = [[slider superview] convertPoint:[slider center] toView:scrollView]; [4thView setCenter:CGPointMake([4th center].x,sliderPoint.y-20)];
    • 是否 - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view 考虑是否有任何转换,如放大第二个视图,如果没有如何做类似的事情跨度>
    • 不,我认为这些方法没有考虑到任何转换。还有其他方法可以通过变换计算点。
    • 还有哪些其他方法?我正在尝试计算视图控制器视图内 UITableView (UIScrollView) 中的 UIButton 的点。 convertPoint 方法似乎给出了滚动视图中的位置,但我试图获得可见的坐标位置。编辑:没关系,发现我正在转换为滚动视图的坐标而不是滚动视图的父级(这是可见区域)。
    • 由于某种原因,我在直接使用点时遇到问题,需要将其包装在 CGPointMake(aPoint.x, aPoint.y) 中。
    【解决方案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 偏移该数量即可。

    【讨论】:

    • 这实际上帮助我弄清楚了我需要什么,它正在滚动到滚动视图中的单击按钮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多