用附加控件注释UICollectionViewselect的devise

使用UICollectionView和在这里给出的StackOverflow的优秀帮助,我已经能够为我的iPhone构build一个“甘特图”风格控制:

当前的应用程序

除了化妆品(我现在正在做function,我有一个graphicsdevise师可以看看颜色和所有这些)。

除了背景之外,使用自定义UICollectionViewLayout子类的跨度相对比较简单。 每个跨度是一个item

但是我需要添加一些function,并且不确定如何继续。 我试图去的地方大致如下:

未来的粗略草图

撇开粗略的化妆品,重点是我想“注释”,无论目前select的跨度与额外的信息(我保证找人帮我看起来很漂亮)。 而且我希望它们是活跃的,我不确定它是否会引起编辑控制或拖动,但是我希望能够识别数字或粗线上的手势,并且使用它们进行操作,与触摸不同驱动select的跨度。

我可以想到(至less)3种方式来尝试和实现这个:

  1. 使用补充意见。 导致selectinvalidateLayout ,在我的prepareLayout检测选中的状态,并为两个锚点生成额外的布局属性。 实现绘制UICollectionReusableView的子类,并添加可触摸的子视图(或其自己的手势识别器)。 这感觉…错了。 我认为补充视图更多的是页眉和页脚,而不是随着select状态的变化而出现的控件。 但也许这是该设施的适当扩展?

  2. 使用我当前的SpanCell类(它是UICollectionViewCell一个子类)的backgroundView (或selectedBackgroundView ,不知道它的问题)。 只要我禁用clipsToBounds ,我可以绘制围绕bounds的注释。 我将不得不透露一些大局的知识以find终点,但那不是太冒犯。 我只是显示/隐藏这个视图来响应select的改变。 这似乎是最好的办法。

  3. 在整个UICollectionView的主backgroundView中进行。 如图所示,我已经有了一个专门的backgroundView ,它显示了当前的时间网格,条forms。 我可以进一步扩展这个视图来绘制注释和pipe理可触摸的子控件来响应select的改变。 这会给我最直接的实现,但感觉就像一个巨大的怪物“为了背景做了太多的工作”。

问题是,对于那些有更多经验的人,你会走哪条路? 会不会是以上3个之一? 或者不同的东西? 为什么?

虽然你的问题是UICollectionView实现,我不是很熟悉,这似乎是一个容器的作业(在这种情况下,收集视图)的技术。 想象一下,除了选定的项目之外,还需要注释来考虑其他项目吗? 例如,避免注释行与其他项目之间的冲突?

对我来说,选项3似乎是最正确的选项。 如果担心大类,可以将其外联到注释控制器类,每当注释应该更新时应该通知注释控制器类。