1

分と秒を選択できる UIPicker を作成しようとしています。コードは次のとおりです。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if(component == 0)
        return 24;

    return 60;
}

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
    return 30;
}

- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    [paragraphStyle setAlignment:NSTextAlignmentCenter];
    [paragraphStyle setTailIndent:20];

    NSString *value = [NSString stringWithFormat:@"%d", row];

    return [[NSAttributedString alloc] initWithString:value
                                           attributes:@{NSParagraphStyleAttributeName:paragraphStyle}];
}

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
    return 160;
}

煩わしい湾曲を取り除き、垂直の柱だけを作成するにはどうすればよいですか?

また、選択行に「分」と「秒」を追加するにはどうすればよいですか?

ピッカー

4

3 に答える 3

0

他の人が言ったように、既存の API ではそれができません。これを行うには、独自のコードを作成する必要があります。過去に水平値ピッカーを作成しましたが、面倒でしたが、かなり簡単でした。それを行うためにUILabel、 、画像、および を使用しましたUIScrollView

最初にUIを設定する

  1. ラベルを取得し、スクロール ビューに貼り付けます。必要な値をラベルに入力します。
  2. スクロール ビューの高さ、幅、および位置を設定して、ユーザーに表示する内容を表示します。ユーザーに選択した項目と上部に 3 つ、下部に 3 つを表示する場合は、ラベルに 7 行を表示するのに十分な大きさにします。
  3. 画像は「選択インジケーター」であり、これをスクロールビューの中央のアイテムの上に重ねて、これが選択されたアイテムであることをユーザーに示します。
  4. 値が最後に行くにつれてきれいなフェード効果が必要な場合は、白 (またはアプリの背景) のブロックを作成して、透明にフェードし、スクロール ビューの上下にオーバーレイすることができます。これにより、コンポーネントの端にフェード ナンバー エフェクトが作成されます。

視覚的には動作を示しています...ほとんどの場合、それをサポートするにはバックエンド コードが必要です。

  1. ユーザーがスクロール ビューを変更したときにスクロール ビューのコンテンツ オフセットを通知する を作成しUIScrollViewDelegateて実装します。scrollViewDidScroll:
  2. 「項目」が選択されたスクロール ビュー コンテンツ オフセットを変換するメソッドを記述します。ラベルに含まれる行数がわかっている場合 (そしてそうすべきである)、ラベルの高さがわかっている (そうすべきである) 場合は、ラベルの高さ/行を取得して、各「アイテム」の高さを取得します。次に、コンテンツのオフセットを取得し、アイテムの高さで割り、床に置くと、現在の行がわかります...コンテンツのオフセットはスクロール ビューの TOP からであることを覚えているので、高さの半分を追加します。:)

これで、基本的な機能は完了し、機能しますが、きれいではありません。

選択したアイテムが選択画像の中央に配置されていませんでした。これは視覚的に醜いだけです。しかし、十分に簡単に修正できます。リスト内の項目の高さがわかっているので、どの項目が選択されているかがわかるので、プログラムでホイールをスクロールして、その項目を中央に配置します。

私が抱えていたもう1つの問題は勢いでした。本物のホイールのように、ピッカーに勢いを持たせたかったので、強くフリックするとしばらく動きますが、軽くフリックするとすぐに止まります。私には長いリストがあり、人々が 7 歳から 70 歳になった場合、簡単にできるようにしたかったのです。興味があれば、私がどのようにそれを行ったかをお見せし、マシンに戻ったときにコードを投稿できます。

于 2014-09-05T19:25:35.537 に答える
0

24 分 60 秒になっているので、24 時間の日付ピッカーで偽装します。いも

煩わしい湾曲を取り除き、垂直の柱だけを作成するにはどうすればよいですか?

あなたはそうしない。それ以外の場合は、2 つのテーブル ビューなどを使用して独自に実装します。

また、選択行に「分」と「秒」を追加するにはどうすればよいですか?

NSString *value;

if(component == 0) value = [NSString stringWithFormat:@"%d min", row];
else  value = [NSString stringWithFormat:@"%d sec", row];
于 2014-09-05T18:44:13.217 に答える