将 UIButtons 添加到折线图中的数据点,在 X 轴上绘制日期和时间

Add UIButtons to data points in a line graph, plotting date and time in X-axis

我正在尝试在简单的折线图上绘制一些数据。下面是我用来存储数据的class。

如何用字符串形式的时间或日期绘制 yValues?

此外,我想将 title 作为 UIButton 添加到图表中的每个数据点。点击 UIButton 应该显示相应的 detailedNote 是一个小弹出窗口。 我搜索并深入研究了很多图表库 iOS,但没有找到添加这个简单功能的方法。

graph-with-buttons-at-data-points.png

此外,过滤和绘制 "Today"、"Last Week"、"Last Month" 或任何时间间隔的数据的方法是什么?

我可以在没有任何第 3 方 frameworks/libraries 帮助的情况下使用 iOS 库(如 Core Plot 和 UIBeizerPath)完成所有这些吗? 我更喜欢使用 UIBeizerPath,因为我可以平滑图形。 https://medium.com/@ramshandilya/draw-smooth-curves-through-a-set-of-points-in-ios-34f6d73c8f9#.28frf03to

谁能给我指出正确的资源.. 非常感谢发布 swift 代码!

class NoteEntry {
var title: String?

var detailedNote: String?

var yValue: Float? = 0

let timeString : String  = {
    let formatter = NSDateFormatter()
    formatter.dateFormat = "h:mm a"
    formatter.AMSymbol = "AM"
    formatter.PMSymbol = "PM"
    return formatter.stringFromDate(NSDate())
}()

let dateString: String = {
    let formatter = NSDateFormatter()
    formatter.dateFormat = "d"
    return formatter.stringFromDate(NSDate())
}()

let dayOfTheWeekString: String = {
    let formatter = NSDateFormatter()
    formatter.dateFormat = "EEE"
    return formatter.stringFromDate(NSDate())
}()

let monthAndYearString: String = {
    let formatter = NSDateFormatter()
    formatter.dateFormat = ""
    return formatter.stringFromDate(NSDate())
}()

}

这里是如何用 SwiftCharts 做到这一点的答案:

  1. 如何用字符串形式的时间或日期绘制 yValues? 您必须将字符串转换回日期。否则图表将不知道如何对它们进行排序。我还建议在模型中存储 class 日期而不是字符串。在需要字符串的地方进行格式化,或者至少在单独的(计算的)变量或扩展中进行格式化。关于如何在 SwiftCharts 中制作带有日期的图表,库中有一些示例,只需了解它们即可。

  2. 标题作为 UIButton 您可以使用任何类型的 UIView 作为图表点/叠加层等。对于带有标题的行,您将有一个行层和一个添加可点击标题的层,请参见例如NotificationsExample - 这与您想要做的非常接近。它使用 HandlingView 而不是 UIButton 来在闭包中进行点击处理而不是使用选择器。使用选择器,您将失去处理点击的图表点的上下文。

  3. 正在为 "today"、"last week" 等过滤数据。 我建议为此打开一个新问题。你不应该把这么多问题捆绑在一起。这也与图表库无关,没有图表库会为您做这件事。你必须使用 NSDateComponents。也许有一个用于时间操作的库 - 如前所述,这是一个单独的问题。

  4. Core plot 是第三方框架 :) 您当然可以从头开始开发图表,但我建议使用库。对于您的特定情况,SwiftCharts 似乎非常合适,您应该能够使用 NotificationsExample 的修改版本完成图表,以使用日期而不是数字(从其他示例复制日期),并调整可点击的叠加层。

如有更多问题,请随时评论此问题或您在 SwiftCharts 中打开的问题。

(免责声明:我是 SwiftCharts 的作者)。