我需要弄清楚如何定位3-5 UIViews (基本上是一个圆形绘制的彩色点)的水平线,这是从一边到另一边,在屏幕上的约束。还是不受约束地去更好呢?
线路应以一天(24小时)为基础。
例如,如果我有3个NSDates,它表示三次(7:00、12:00和22:00),我希望它们在时间线上被正确定位:
编辑。再多想一想,我就会发现我无法做到这一点。问题是,时间线上的每个点都是一个特定任务的"todo"-time。但可能有几个任务。每个任务都是一个表格单元格。因此,将有多个时间表:
-12-18
因为每个点在上面都有一个标签,所以我不能根据时间来定位这些点。因为在垂直方向上没有24种位置的空间。因此,对于具有相同时间的点(在两个不同的时间线中)将不能正确地对齐。
现在我是如何解决这个问题的:将每个任务划分为两个数组,一个在12.00之前一直执行,另一个在12.00之后执行。
然后,我使用第一个数组,从左侧最早的时间开始(约束导致superview),其余的从右到视图,以此类推。
然后,我接受第二个数组,并从末尾(最新的时间)开始,然后将它们添加到右边(约束拖到superview),其余的添加到前面的视图,依此类推。
这就是结果:在这里输入图像描述
发布于 2016-09-12 21:14:57
我也做过类似的事。我为每个表视图单元格视图返回一个UIImage,并根据一个NSDate水平地排列数字。您只需将NSDate转换为CGFloat值即可。这个扩展为我提供了一个十进制值,表示来自NSDate的小时和分钟。
extension NSDate {
var hourInDecimal: CGFloat {
get {
let userCalendar = NSCalendar.currentCalendar()
let timeNowInDecimal = CGFloat(userCalendar.component(.Hour, fromDate: self)) + CGFloat(userCalendar.component(.Minute, fromDate: self))/60
return timeNowInDecimal
}
}
}
如果是24小时的话,横向安装是很困难的,所以我只使用数据从第一个小时到最后一个小时。上午7点-> 10点确实符合。
然后得到从左边边缘的距离(对于约束).
let oneHourWidth = containerView.width/(lateHour - earlyHour)
let distanceToLeftEdge = oneHourWidth * (eventTime.hourInDecimal - earlyHour)
请注意,上述对Swift 3的一些更改。
https://stackoverflow.com/questions/39454736
复制相似问题