【发布时间】:2014-03-13 17:32:43
【问题描述】:
使用UICollectionView 和 StackOverflow 上提供的出色帮助,我已经能够为我的 iPhone 构建一个“甘特图”样式的控件:
除了化妆品(我现在正在做功能,我有一个图形设计师可以随时查看颜色等等)。
撇开背景不谈,使用自定义 UICollectionViewLayout 子类来处理跨度相对简单。每个跨度都是一个item。
但我需要添加一些功能,但不确定如何继续。我想去的地方大致如下:
撇开粗略的化妆品不谈,关键是我想用附加信息“注释”当前选择的跨度(我保证会找人帮我看起来漂亮)。我希望它们处于活动状态,我不确定它是否会调出编辑控件或拖动,但我希望能够识别数字或粗线上的手势并用它们做事,与触摸不同驱动选择的跨度。
我能想到(至少)3 种方法来尝试和实现它:
使用补充视图。导致选择
invalidateLayout,在我的prepareLayout中检测选中状态,并为两个锚点生成额外的布局属性。实现UICollectionReusableView的子类,它进行绘图,并添加可触摸的子视图(或它自己的手势识别器)。这感觉……不对。我的想法是补充视图更多地用于页眉和页脚,而不是随着选择状态的变化来来去去的控件。但也许这是对设施的适当扩展?使用我当前 SpanCell 类(
UICollectionViewCell的子类)的backgroundView(或selectedBackgroundView,不确定是否重要)。只要我禁用clipsToBounds,我就可以在span的bounds周围绘制注解。我必须给它一些大局的知识才能找到端点,但这并不太冒犯。我只会显示/隐藏此视图以响应选择更改。这似乎是最好的方法。在整个
UICollectionView的主要backgroundView中执行此操作。如图所示,我已经有了一个专门的backgroundView,它显示了当前时间网格,条形样式。我可以进一步扩展此视图以绘制注释并管理可触摸的子控件以响应选择更改。这会给我最直接的实现,但感觉就像我最终会得到一个大怪物“做太多工作”的背景对象。
那么问题来了,对于那些有更多经验的人,你会走哪条路?它会是上述3个之一吗?还是有什么不同?为什么?
【问题讨论】:
标签: ios ios7 uicollectionview uicollectionviewcell uicollectionviewlayout