2009-12-12 11 views
8

L'ho visto solo in MOLTE poche app per iPhone ... ma sembra un picker che ruota a sinistra/destra (invece che in alto/in basso).Un iphone uipickerview che ruota orizzontalmente?

Di solito lo mettono su 1 riga di una tabellaVisualizza ... per consentire all'utente di scegliere rapidamente tra un piccolo numero di scelte (come 3-10).

Come è codificato?

+0

Ecco cosa il selettore dovrebbe essere simile: http://images.macworld.com/images/reviews/graphics/143531-dr_dof_original.jpg – Donna

risposta

-12

Hai mai considerato di prendere una vista tabella e ruotarla?

Non la penso così. Vai a provarlo. :)

+0

probabilmente non vorrei ruotare l'intera tabella-view. (E le "righe" vanno dall'alto verso il basso sullo schermo.) Ma ... forse gli sviluppatori stanno ruotando il selettore ... e alcuni come ridimensionarlo per adattarlo a 1 riga del tavolo- vista. Ma come sarebbe il codice? – Donna

+0

Perché non provi a scriverlo e a scoprirlo da solo? Questo è l'unico modo per imparare qualcosa. – Sneakyness

+0

Consiglio vivamente di leggere tutta la documentazione di Apple all'indirizzo http://developer.apple.com nella sezione iPhone per iniziare, sia con la programmazione iPhone che con Objective-C. – Sneakyness

0

Prova una visualizzazione per pagina che contiene gli elementi desiderati su una pagina, e forse sovrapponi un'immagine sopra di essa se vuoi una grafica più bella per il tuo controllo e permetti solo lo scorrimento orizzontale (non rendere il contenuto Dimensione della vista a scorrimento più alta della dimensione della vista effettiva e disabilitare il controllo scorrimento verticale sul controllo).

3

È possibile eseguire questa operazione eseguendo regolarmente UIPickerView, regolandone la larghezza (tramite setFrame:) e quindi applicando un NSAffineTransform per ruotarlo di 90º. Dovrai quindi ruotare ogni oggetto nel selettore di 90º nell'altro modo.

È un po 'noioso farlo correttamente, ma può essere fatto.

+0

Le lettere non gireranno anche di 90 gradi? Penso che sia una visualizzazione personalizzata sullo screenshot. –

+0

@Alex sì, ecco perché è necessario ruotare ogni 'viewForRow: forComponent: reusingView:' di 90º nell'altro modo. –

6

Continuando la risposta da Dave DeLong ho ottenuto che funziona in questo modo ......

In viewDidLoad ho fatto questo ...

CGRect frame = horizontalPickerView.frame; 
     frame.size.width = 50; 
     frame.size.height = 216; 
     frame.origin.x=90; 
     frame.origin.y = 200; 
     horizontalPickerView.frame = frame; 

     horizontalPickerView.transform = CGAffineTransformMakeRotation(3.14159/2); 






- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ 
     UILabel *lbl = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 30, 20)] autorelease]; 
     lbl.transform = CGAffineTransformMakeRotation(-3.14159/2); 
     lbl.text = @"hi"; 
     return lbl; 
    } 

Spero che questo aiuti

+1

Per CGAffineTransform non dimenticare di aggiungere QuartzCore Framework al tuo progetto –

+0

puoi spiegare il 3.14159/2? (Conosco il suo PI, ma perché è qui e perché il/2)? –

+1

l'ho fatto in modo che il selettore sia ruotato di 90 gradi quindi scorrerà orizzontalmente e 3.14159/2 è il valore di 90 gradi in radianza –

0

Prova questa -> Crea Plain UIVew delle dimensioni di UIPickerview, aggiungi un selettore su di esso. set numberOfComponentsInPickerView = 1. imposta la larghezza del componente. Quindi aggiungere piccole viste secondarie su Nascondi per il resto del selettore. Dovrebbe essere visibile solo la ruota rotante del componente. Trasforma la vista normale per ruotarla di 90 gradi.

Assicurarsi di applicare trasformata di in:

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 

{ 

    UILabel *lbl = nil; 
    if(view) 
    { 
     lbl = (UILabel *) [view viewWithTag:11]; 
    } 
    else 
    { 
     view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; 
     lbl = [[UILabel alloc] initWithFrame:CGRectMake(1, 0, 30, 30)]; 
     lbl.tag = 11; 
     lbl.backgroundColor = [UIColor clearColor]; 
     lbl.textAlignment = UITextAlignmentCenter; 
     lbl.font = [UIFont fontWithName:@"Helvetica-Bold" size:18]; 
     lbl.transform = CGAffineTransformRotate(lbl.transform, M_PI +M_PI/2); 
     [view addSubview:lbl]; 
     [lbl release]; 
    } 


    lbl.text = [dataSourceArray objectAtIndex:row]; 


    return view; 
} 

Ora è possibile aggiungere vista Palin come una visualizzazione secondaria per raccoglitrice orizzontale in ogni caso.

0

Dovrai creare il programma di selezione in modo programmatico, in modo da poter creare il selettore di dimensioni personalizzate con CGRectMake(x, y, width, height) quindi, dovrai ruotarlo, ma ruotandolo ruoterà anche nei metodi DataSource del Picker, dovrai ruotare il selettore vista inverso di rotazione della raccoglitrice, sto incluso il codice hopfully aiuterà

..... 
... 
... 
NSArray *arr = [NSArray arrayWithObjects:@"1 mi", @"2 mi", @"5 mi", @"10 mi", @"15 mi", @"20 mi", @"25 mi", 
       @"30 mi", @"35 mi", @"40 mi", @"45 mi", @"50 mi", @"75 mi", @"99 mi", nil]; 

    radiusDefaults = [[NSMutableArray alloc] initWithArray:arr] ; 

    radiusPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 100, 150)]; 
    radiusPicker.delegate = self; 
    radiusPicker.dataSource = self; 
    radiusPicker.showsSelectionIndicator = NO; 

    //Resize the picker, rotate it so that it is horizontal and set its position 
    CGAffineTransform rotate = CGAffineTransformMakeRotation(-1.57); 
    rotate = CGAffineTransformScale(rotate, .1, .5); 
    CGAffineTransform t0 = CGAffineTransformMakeTranslation(-61, 0); 
    radiusPicker.transform = CGAffineTransformConcat(rotate,t0); 

// [theNavigationBar.topItem setTitleView:radiusPicker] ; 
    UIView *pickerWrapper = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 215)]; 
    [self.view addSubview:radiusPicker]; 
    [radiusPicker selectRow:6 inComponent:0 animated:NO]; 
    [radiusPicker release]; 

..... 
....... 
.... 

    #pragma mark - 
    #pragma mark UIPickerView 
    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row 
       forComponent:(NSInteger)component reusingView:(UIView *)view{ 


     UIView *viewForRow = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 70, 400)] autorelease]; 

     UILabel *label; 

     UIFont *font = [ UIFont fontWithName:@"ArialRoundedMTBold" size:22]; 


     label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 20, 70, 350)] autorelease]; 

     [label setText:[NSString stringWithFormat:@"%@", [radiusDefaults objectAtIndex:row]]]; 
     label.textAlignment = UITextAlignmentCenter; 
     label.textColor = [UIColor blueColor]; 
     label.font = font; 
     label.backgroundColor = [UIColor clearColor]; 
     // label.opaque = NO; 
     [viewForRow addSubview:label]; 

     CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57); 
     rotate = CGAffineTransformScale(rotate, 1, 6.5); 
     [viewForRow setTransform:rotate]; 
     return viewForRow; 
    } 
1

@ codice di Madhup mi portano nella direzione generale che volevo quando ho cercato per l'orizzontale UIPickerView ma poi ho capito la domanda posta non era veramente indirizzato così per chiunque fosse alla ricerca di una risposta più adatta alla rotazione da sinistra a destra. Il codice nelle risposte che avevo letto era tutto per abilitare lo scorrimento da sinistra a destra, facendo in modo che il selezionatore spingesse le etichette/righe con valori più alti a sinistra della vista.Qualsiasi modi Ecco il mio contributo:

Nel metodo viewDidLoad:

yourPickerView.frame = frame; 
    yourPickerView.transform = CGAffineTransformMakeRotation(4.71238898); //Instead of rotating clockwise 90° we're rotating 90° counterclockwise. 4.71238898 being ≈270° in radians. 
    [self.view addSubview:self.picker]; 
    self.yourPickerView.delegate = self; 
    self.yourPickerView.dataSource = self; 
    self.yourPickerView.showsSelectionIndicator = YES; 
    self.yourPickerView.userInteractionEnabled = YES; 

metodo s' The pickerView:

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ 
     UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease]; 
    yourLabel.transform = CGAffineTransformMakeRotation(1.57079633); //Instead of rotating counterclockwise 90° we're rotating 90° clockwise 1.57079633 being ≈90° in radians. 
    yourLabel.font = [UIFont fontWithName:@"System-Bold" size:18]; //Your font here. 
    yourLabel.text = @"yourLabel's text"; //or like me [NSString stringWithFormat:@"%@, [yourArray objectAtIndex:row]] 
    yourLabel.backgroundColor = [UIColor clearColor]; 
    return label; 
    } 
6

Here troverete il codice sorgente per Picker, che è allineato orizzontalmente.

+0

Impossibile scorrere orizzontalmente. Devi toccare ogni cella per scorrere. – chicobermuda