contentOffset在UIScrollView中做了什么?

时间:2010-07-26 23:47:28

标签: iphone uiscrollview

contentOffsetUIScrollView属性的用途是什么?

3 个答案:

答案 0 :(得分:66)

它可以被视为<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/> <div class="container"> <svg width="100%" height="80" class="tabcontainer"> <svg width="100%" height="20" viewBox="0 0 132 20" class="tabbutton"> <polygon points="16,0, 116,0, 132,20, 0,20"/> <g transform="translate(66,0)" fill="white"> <rect x="-8" y="4" width="16" height="3"/> <rect x="-8" y="9" width="16" height="3"/> <rect x="-8" y="14" width="16" height="3"/> </g> </svg> <rect y="20" width="100%" height="60" fill="red" class="tabbody"/> </svg> </div>框架相对于其scrollView框架原点的原点坐标。见下图:

enter image description here

答案 1 :(得分:50)

根据 documentation contentOffset属性代表:

  

的起源点   内容视图偏离原点   滚动视图。

简单地说,它是视图在每个方向(垂直和水平)移动了多远。您可以通过访问x的{​​{1}}和y属性解压缩垂直和水平距离:

CGPoint

答案 2 :(得分:2)

enter image description here

在这里您看到两个矩形:

  • 可见区域
  • 总面积

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

在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)对此更改进行动画处理,则滚动视图似乎会随着用户手指的拖动而滚动。

官方文档定义了contentOffset,如下所示(斜体是我的):

  

contentOffset:内容视图(总区域)的原点与滚动视图(可见区域)的原点偏移的点 em>。

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

  

例如,如果要显示n个可以滚动的页面,则可以创建一个带有contentSize(n * pageWidth,pageHeight)和边界大小(pageWidth,pageHeight)的UIScrollView。然后,将contentOffset.x =(n-1)* pageWidth设置为n = 1,以显示第一页。