1 简单理解
- 可以把 UIScrollView 看做是一个探照灯。探照灯的尺寸就是 UIScrollView 的尺寸。
- UIScrollVIew 的 ContentView 可以看做是在探照灯下的内容。
想象一个场景:你端着探照灯,查看一张地图,地图大得很,只能看到探照灯下面的内容。你为了看到更多的内容:1 自己很勤快:自己动探照灯;2 自己不想动,保持探照灯不动,只移动地图,地图从上往下动,也能看到所有的内容。 - 最最重要的:1 带着坐标系去理解 ScrollView 和 ContentView;2 动就只动一个,不要两个都动。
注意:1 此时若动 ScrollView ,则保持 ContentView 的坐标原点不变化(改变 ScrollView 的 Bounds )。第二种理解:保持 探照灯 ScrollVIew 的坐标原点不动,移动 ContentView 的 Bounds。
2 基本属性
从文顶顶的博客中盗来的图片。
- contentSize
- contentOffset
- contentInset
[注]:一个用户习惯:手指往上滑动时,想要看到下面更多的内容。可以理解为:1 将 ContentView 往上挪 2 或者 将 ScrollView 往下挪,两者不要搞混。自然的用户行为是:手指往上滑动时,就可以看做是 1 将ContentView 往下挪 2 将 ScrollVIew 往上挪
3 实现几个效果
- 实现类似新浪微博的个人中心效果
1.监听 ContentOffset.y 的改变
2.设置导航栏的隐藏和显示 - 实现新特性页面
1.监听 ContentOffset.x 的改变,计算对应的页码
2.设置按钮的显示与隐藏 - 简书首页效果实现
- 设置 ContentInset,让内容不要被导航栏挡住
- 在 ScrollVIew 上添加 UITableViewController 的视图
问题:此处的 tableView 的内容为什么能穿透导航栏显示? - 自定义流水布局实现卡片放大
- 计算每个 Rectangle 中的 item 的显示布局
- Item 中的卡片的中心点的计算,以 ContentView 的原点为参照点。这里一定借助 ScrollView 和 ContentView 之间的坐标系理解