0

時を刻むカスタムに取り組んでいUIPickerViewます。以下のウェブサイトに表示されているものと一致する必要があります。

時刻は に開始されxますが、今のところは午前 0 時です (いつでもかまいません)。の間隔をインクリメントしますi。下の画像の場合i = 7

私が直面している問題は、たとえば1amのように時間を変更すると、ユーザーがその時間の分のみを選択できるように分も変更する必要があることです。これは の増分ですiが、よくわかりません実行する正しいアルゴリズム。

今のところ60 % i == 0、 を使用し、UIDatePickerを に設定minuteIntervalしていますが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 
}

剰余は、残りを与えることで毎回あなたの分を与えます..したがって、あなたの例では、分は56 => 63 => 3になります。これはあなたが望むものです.

特定の間隔の分と時間を知りたいだけの場合 (間隔が 0 から 206 になるとします (1 日に 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 (またはそれに相当するもの) を返すだけです。

明らかに、これはこれを行う多くの方法の 1 つであり、さらに詳細に進むには、より多くのコンテキストが必要になります。

幸運を

于 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 に答える