0

我正在研究一种UIPickerView会显示时间的习惯。我需要它们与下面显示的网站相匹配。

时间将从现在开始,x但现在是午夜(可以是任何时间)。然后它将增加i. 对于下图i = 7

我遇到的问题是当我更改时间时,例如1am,分钟也需要更改,以便用户只能为该小时选择一分钟,即以 为增量i,但我不确定运行正确的算法。

现在我使用60 % i == 0then 使用UIDatePickerand 设置minuteIntervalto i,但如果60 % i != 0那是我需要使用这个客户选择器的地方。

任何人都可以帮助我提供一种算法,该算法可以为我提供小时分钟的行数,并根据间隔填充小时和分钟吗?

在此处输入图像描述

4

2 回答 2

1

我不能告诉你任何关于objective-c、ios 或uipickerview 的事情......对于算法。这是一些没有特别语言的伪代码:

i = 7      // this is i in your example
offset=420 // This is where you could say you want 
           // to start at 7:00 (420 minutes after midnight) 
           // you could use any number here obviously.
counter = offset
while (counter<1440+offset){
    counter = counter+i
    minutes = counter%60
    hours   = counter/60  // Use integer division 
}

modulous 每次都会通过给您剩余的时间来为您提供分钟数。因此,在您的示例中,分钟数将从 56 => 63 => 3 开始,这就是您想要的。

如果您只想知道给定间隔的分钟和小时数(假设间隔从 0 到 206(一天有 206 个 7 分钟间隔),那么您可以执行以下操作:

minutes = (i*intervalNum) % 60
hours =   (i*intervalNum) / 60    // Integer division!

如果您需要一段时间内的间隔数,您可以执行以下操作:

keep a hashmap (again I don't know how objective-c handles these) that maps an hour to a list of the minutes that mark intervals.  In your example you could have a hashmap that looks like:

{0 => (0,7,14,21,28,35,42,49,56),
 1 => (3,10,17,24,31,38,45,52,59),
 2 => (6,13,20,27,34,41,48,55),
 ...
}

您将在第一轮通过时构建此地图。要获取 2-3 时隙中的间隔数,只需返回 map[2].length (或任何等效项)。

显然,这是执行此操作的许多方法之一,并且需要更多上下文才能进入任何进一步的细节。

祝你好运

于 2012-10-02T18:27:59.680 回答
0

感谢ajon,我想出了这段代码

NSInteger counter = startTime;
while (counter + minuteInterval < endTime) {
    counter = counter + minuteInterval;
    NSLog(@"Hours: %d Minutes: %d", counter / 60, counter % 60);
}

我不得不做一些修改,但我会发布我的代码,以防其他人遇到这个问题。我将他标记为答案,因为它提供了此代码的基础。

于 2012-10-02T19:48:52.553 回答