【问题标题】:How to get scroll views visible rectangle frame after it scrolls in IOS?如何在 IOS 中滚动后让滚动视图可见矩形框?
【发布时间】:2013-10-02 15:48:59
【问题描述】:

在 şt 滚动后,我无法在滚动视图中获取可见矩形的坐标。因此,当我想在可见矩形中添加子视图时,我不能。我该怎么做?

【问题讨论】:

  • 你为什么不能?可见矩形的原点为 scrollview.contentOffset 大小为 scrollview.bounds.size

标签: ios uiscrollview


【解决方案1】:

UIScrollView 的可见矩形是myScrollView.bounds。正如其他答案所建议的那样,无需使用CGRectMake 或使用contentOffset 属性(尽管它确实可以让您到达同一个地方)。但是,如果滚动视图允许缩放,那么您需要转换矩形以考虑缩放。 this answer 中提供了许多应用转换的解决方案。

【讨论】:

    【解决方案2】:
    CGRect visibleRect = CGRectMake(myScrollView.contentOffset.x, myScrollView.contentOffset.y, myScrollView.contentOffset.x + myScrollView.bounds.size.width, myScrollView.contentOffset.y + myScrollView.bounds.size.height)
    

    这应该会在滚动后为您提供当前可见的rect。 当你想计算矩形时,你必须决定的不是什么。如果您想即时获取此信息,请在scrollViewDidScroll 方法中执行此操作。如果您想在用户开始滚动时获取它,请在scrollViewWillBeginDragging 中进行。如果您希望在用户完成滚动并且 scrollView 静止后进行操作,请在 scrollViewDidEndDraggingscrollViewDidEndDecelerating 中执行此操作。

    【讨论】:

    • 您的答案中的尺寸不正确。您不会将偏移量添加到大小。
    【解决方案3】:

    滚动视图的可见矩形如下:

    CGRectMake(scrollview.contentOffset.x, scrollview.contentOffset.y, scrollview.frame.size.width, scrollview.frame.size.height)
    

    【讨论】:

    • 注意,这是正确的,但可以简化为scrollview.bounds。对于UIScrollView,边界的原点是内容偏移量。此外,这仅适用于 zoomScale = 1。如果缩放,您必须转换 rect 以获得正确的结果。
    【解决方案4】:

    我不完全确定您在问什么,但是如果您需要在滚动时获取内容偏移量,您可以使用委托方法:

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView
    

    每次 contentOffset 更改时都会调用它。

    你也可以使用

    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    

    要知道滚动视图的contentOffset 停止减速的秒数。

    或者

    -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    

    当用户停止平移时知道滚动视图的contentOffset

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多