【问题标题】:What does contentOffset do in a UIScrollView?UIScrollView 中的 contentOffset 有什么作用?
【发布时间】:2011-03-21 08:49:38
【问题描述】:

UIScrollView 中的contentOffset 属性有什么用?

【问题讨论】:

    标签: iphone uiscrollview


    【解决方案1】:

    这里你看到两个矩形:

    • 可见区域
    • 总面积

    滚动正在改变整个区域内可见区域的原点。

    在 iOS 中,所有视图都有一个由view.bounds 矩形表示的可见区域。 UIScrollView 类是一个具有独特属性的视图:它有一个称为“内容视图”的第二个矩形,其大小大于其边界。因此,在滚动视图中:

    • 可见区域为scrollView.bounds
    • 总面积称为内容视图,其大小为scrollView.contentSize

    contentOffsetscrollView.bounds.origin的别称,实现如下:

    var contentOffset: CGPoint { 
        get { return bounds.origin }
        set {
            var bounds = self.bounds
            bounds.origin = newValue
            self.bounds = bounds
        }   
    }
    

    当我们以编程方式更改 contentOffset 时,我们也在更改 bounds.origin,这会导致呈现内容视图的不同区域。如果我们用setContentOffset(pt, animated: true) 为这个变化设置动画,scrollView 看起来就像被用户的手指拖动一样滚动。

    官方文档是这样定义 contentOffset 的(斜体是我的):

    contentOffset:内容视图的原点(总面积)与滚动视图的原点(可见区域)的偏移点.

    我想强调@westsider 对已接受答案的评论:

    例如,如果你想展示 n 个可以滚动的页面,你可以创建一个 UIScrollView,它的 contentSize (n*pageWidth, pageHeight) 和 bounds size (pageWidth, pageHeight)。然后将 contentOffset.x = (n-1) * pageWidth 设置为 n = 1 以显示第一页。

    【讨论】:

      【解决方案2】:

      可以认为是scrollView的框架原点相对于contentView的框架原点的坐标。见下图:

      【讨论】:

      • 这是一个更好的答案。选定的答案只是对文档的重新散列。
      • 然而这似乎不起作用,当我改变 x 的值时它什么也没做。
      • @Hugo 我只是描述了它的含义,而不是如何让它正常工作。您的问题可能有多种原因,包括您设置此属性的位置。
      • 我想说的答案很棒,解释清楚简单
      【解决方案3】:

      根据documentationcontentOffset属性表示:

      原点 内容视图从原点偏移 滚动视图。

      简单来说,就是视图在每个方向(垂直和水平)上移动了多远。您可以通过访问CGPointxy 属性来解包垂直和水平距离:

      CGFloat xOffset = _myScrollView.contentOffset.x;
      CGFloat yOffset = _myScrollView.contentOffset.y;
      

      【讨论】:

      • 例如,如果你想展示几个 (n) 可以滚动的页面,你可以创建一个 UIScrollView,其 contentSize (n*pageWidth, pageHeight) 和框架大小 (pageWidth, pageHeight) .然后,您可以使用 contentOffset.x 来确定(或设置)正在(或应该)显示的页面。
      • 既然滚动是通过改变滚动视图的边界原点(或者它的内容视图?忘了)来完成的,那么 contentOffset 是否与边界原点直接相关?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多