我想了解如何实现与标准 Weather iPhone 应用程序相同的垂直滚动行为(所有水平行为看起来都很明显)。我已经看到了this问题,但这还不够。目标是使用 UIScrollView
和/或 UITableView
构建 View 层次结构,可能没有太多自定义动画。我为三种不同的状态制作了屏幕截图:
初始状态:
“刷新”状态(拖动):
详细状态(滚动):
我已有的想法:将屏幕分成红色、黄色、绿色和蓝色模块看起来不错。
1) 绿色 + 蓝色区域(和黄色?)非常接近 UITableView
,其中绿色模块作为标题 View ,但有一点不标准——我们可以将绿色模块移动到顶部,跳过“刷新”区域。
2) 即使在红色区域的最顶部,我们也可以与蓝色/绿色模块交互,上下移动它们,因此,这个区域可能是 UITableView
的inset
在 UITableView
下使用自定义动画 UIView
?
我们无法真正了解发生了什么,因为它是 Apple 的源代码。然而,没有太多选项可用于设计天气应用程序所具有的逻辑类型,因此我们可以假设他们的流程涉及与这些类似的步骤。
*您将编写大量布局和动画代码以使 View 以不同的速度移动、自定义布局和其他精细细节。
- 首先,您很可能需要子类化
UICollectionViewLayout
以获得您的多向滚动 并创建自定义布局。子类化将允许完全控制集合的设计。如果您愿意设计不太复杂的东西,您可以使用 UICollectionViewFlowLayout
以最少的开发来设计基于集合的布局。
Collection View Programming Guide for iOS - Creating Custom Layouts
可行性发展纲要
构建自定义布局
- 填充 CollectionView
- 子类
UICollectionViewCell
用于管理 socket 连接
构建自定义布局以保存动态数据
- 创建一个
CustomCollectionViewLayout
并让它成为 UICollectionViewLayout
的子类,以便为 collectionView 提供有关单元格的信息。此布局仅向 Collection View 提供要显示给用户的信息。这意味着它不会成为您的用户界面的一部分。
UICollectionViewLayout
UICollectionViewLayout Class Reference
每个布局对象都应实现以下方法以符合协议(protocol):
collectionViewContentSize
layoutAttributesForElementsInRect
layoutAttributesForItemAtIndexPath
shouldInvalidateLayoutForBoundsChange