2011-12-04 10 views
2

スクリーンスペースが不足しているため、ユーザーがホイールを回転させたときにUIPickerViewでイメージの説明(UILabelがピッカービューに表示されます)が表示されます。 viewForRow:を使用してスピンを検出し、説明を表示します。問題は、これまでに書いたコードを使って、最初の2行と最後の2行の説明を表示できないということです。すべてのヘルプをいただければ幸いですスピン時にUIPickerViewの中央の行を検出する方法

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    UIImageView *image=[[[UIImageView alloc]initWithImage:[UIImage imageNamed:[zodiacSigns objectAtIndex:row]]]autorelease]; 
    selectedZodiac.frame=CGRectMake(80, 80, 50, 50); 
    selectedZodiac.hidden=NO; 
    @try { 
    //Here -2 is offset of the view in central row 
     selectedZodiac.text=[zodiacSigns objectAtIndex:row-2]; 
    } 
    @catch (NSException *exception) { 
     NSLog(@"Exception caught"); 
    } 
    @finally { 

    } 
    if([yourZodiacPicker selectedRowInComponent:0]!=0) 
    { 
     [self.view insertSubview:selectedZodiac aboveSubview:self.view]; 
    } 
    NSLog(@"reuseView"); 
    return image; 
} 

: はここに私のコードです!

+0

誰かが、ユーザーがホイールを上または下に回転させているかどうかを検出する方法を教えてもらえますか?私はそこでそれを処理します – blackhawk4152

+0

-2オフセットで何をしようとしているのか分かりません。 -2行を削除して中心行の説明を表示してみませんか?あなたはあなたの問題を詳述しようと思いますか? –

+0

@Pol Mum uForickerviewに新しいビューがプッシュされたときにのみviewForRow:メソッドが呼び出されるため、-2 offsetが必要です。つまり、[row]はUIPickerViewの最後のオブジェクト(ユーザーがスピンしたとき)とUIPickerViewの最上位のオブジェクト(ユーザーがスピンしたとき)に対応しますが、中央オブジェクトは対応しません。 UIPickerViewの終わりにある最後のオブジェクトと中央オブジェクトの間の差は-2です。私はそれが問題を解決するのを助けることを望む。 – blackhawk4152

答えて

2

本当にこの機能が必要な場合は、ScrollView/TableViewと一致するオーバーレイイメージでPickerViewを再作成するのが最善の方法だと思います。

スクロールビューが停止すると、選択/ハイライトを無効にし、最も近い「セル」にスクロールします。

次に、画面の中央にあるセルを確定します。 コンテンツの前後にビューを追加して、最初または最後のセルを画面の中央に移動できるようにする必要があります。

+1

良いアイデア。あなたはそれを達成するためにこれから始めることができます:http://iphonedevelopment.blogspot.com/2009/01/longer-spinning-blurring.html – Chrizzz

-1

私は間違っているかもしれませんが、現在選択されている画像の説明を表示するだけであれば、viewForRow:forComponentで行うのではなく、pickerView:didSelectRow:inComponent: 。あなたは常に選択ピッカー行の説明を表示することになる

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    selectedZodiac.frame=CGRectMake(80, 80, 50, 50); 
    selectedZodiac.hidden=NO; 
    selectedZodiac.text=[zodiacSigns objectAtIndex:row]; 
} 

この方法:それはこのようなものになるだろう。

+0

返信ありがとうございますが、私はスピン時にのみ説明を表示する必要があります。ユーザーが行を選択したときではありません。説明はユーザーがホイールを回転させたときに表示され、ユーザーが行を選択すると消えます。 didSelectRow:ユーザーがホイールを回転させると呼び出されません。ホイールが停止したときにのみ呼び出されます。今のところ、私は、ユーザーがホイールを上下に回転させるかどうかを検出する方法を理解する必要があります。この方法では、ユーザーがスピンダウンしたときに-2オフセットを適用し、スピンアップしたときに+2を適用することで中央の行を見つけることができます。とにかく、応答のためにありがとう – blackhawk4152

+1

@ blackhawk4152うーん、私は参照してください。あなたの問題を簡単に解決する方法はありません。私は似たような質問をここで聞いた:[http://stackoverflow.com/questions/5237696/read-position-of-pickerview-while-scrolling](http://stackoverflow.com/questions/5237696/read-position-of -pickerview-while-scrolling)、しかし彼らは良い解決策に到着しなかった。それをチェックしますが、違うことをする方が簡単かもしれません。 –

関連する問題