【发布时间】:2011-03-21 08:49:38
【问题描述】:
UIScrollView 中的contentOffset 属性有什么用?
【问题讨论】:
标签: iphone uiscrollview
UIScrollView 中的contentOffset 属性有什么用?
【问题讨论】:
标签: iphone uiscrollview
这里你看到两个矩形:
滚动正在改变整个区域内可见区域的原点。
在 iOS 中,所有视图都有一个由view.bounds 矩形表示的可见区域。 UIScrollView 类是一个具有独特属性的视图:它有一个称为“内容视图”的第二个矩形,其大小大于其边界。因此,在滚动视图中:
scrollView.bounds
scrollView.contentSize
contentOffset是scrollView.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 以显示第一页。
【讨论】:
根据documentation,contentOffset属性表示:
原点 内容视图从原点偏移 滚动视图。
简单来说,就是视图在每个方向(垂直和水平)上移动了多远。您可以通过访问CGPoint 的x 和y 属性来解包垂直和水平距离:
CGFloat xOffset = _myScrollView.contentOffset.x;
CGFloat yOffset = _myScrollView.contentOffset.y;
【讨论】: