【问题标题】:how to draw multi-day event rectangles across multiple days on a month-view calendar on IOS?如何在IOS的月视图日历上跨多天绘制多天事件矩形?
【发布时间】:2015-10-07 11:46:26
【问题描述】:

在IOS的月视图日历上跨多天绘制多天事件矩形推荐什么方法?牢记目标是能够在日历上拖放事件栏

我想到了两个选项,但我不确定哪个最好(或者如果有另一个)是:

  1. 使用UICollectionView(和UICollectionViewFlowLayout)——但是这样的话,每个多日活动不会有一个对象吗?即每个多日事件都需要在每天的单元格中分别有效地绘制其自身的一部分,并确保绘制线显示为单个条

  2. 自己绘制日历,因此您可以放置​​多天矩形条以便于拖放,但是您将无法从与继续滚动日历相关联的 UICollectionView 获得渲染支持并根据需要创建/删除单元格?

欢迎任何建议/指导。

【问题讨论】:

    标签: ios drag-and-drop calendar uicollectionview uicollectionviewlayout


    【解决方案1】:

    我建议如下:

    • 创建您自己的代表一天的集合视图单元(您可能 已经这样做了)。
    • 将“事件”属性添加到单元格中 所有开始、结束或包含当天的事件(您在 collectionView:cellForItemAtIndexPath: 中设置)。
    • 您必须决定是自己绘制矩形(覆盖 drawRect)还是 添加视图(例如 imageView,...)。无论如何:有 4 种场景:

      1. 事件在单元格中开始,但在另一个单元格中结束
      2. 事件在单元格中开始,在单元格中结束
      3. 事件在另一个单元格中开始并在此单元格中结束
      4. 事件在单元格之前开始,在单元格之后结束

    针对每一种场景,绘制对应的图形或者添加对应的视图。如果你使用纯色矩形/视图,这很容易,如果矩形有边框或圆角,你必须为每个场景绘制不同的矩形。

    如果您拖动事件,只需调整事件的日期并确保将其从/添加到相应的单元格并重新绘制单元格。

    “事件”属性的另一种(可能更简单)方法可能是,单元格可以从事件管理器之类的东西中查询相应的事件。

    【讨论】:

    • 谢谢 - 我可以问 (a) 这个概念是在拖动后触发整个重新加载,还是找到一种方法使所涉及的开始日期和结束日期之间的所有单元格无效? (b) 在拖动过程中如何以某种方式向用户显示被拖动项目的视图/指示?理想情况下(可能很难)它会像 iMovie 一样,当您拖动它时,它会突出显示它在该时间点可能掉落的最近可用位置。
    • 你不需要重新加载整个collectionView。由于您知道开始和结束日期(拖动时会发生变化),因此您可以确定哪些单元格需要更新,并且可以使用 reloadItemsAtIndexPaths 更新它们。由于您在拖动时调整了开始和结束日期,因此应该自动移动矩形。您还可以在拖动时绘制不同的矩形。对于最近的目的地,我会插入一个以相同方式呈现的临时事件(你应该免费获得)。
    • 您可以将属性“拖动”和属性“占位符”添加到事件类。然后你可以决定你必须在单元格内绘制哪种矩形。
    猜你喜欢
    • 2016-04-24
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多