2009-12-12 10 views
8

Solo lo he visto en muy pocas aplicaciones de iPhone ... pero parece que un selector gira hacia la izquierda/derecha (en lugar de arriba/abajo).¿Una uipickerview de iphone que gira horizontalmente?

Suelen colocarlo en 1 línea de una mesa Vista ... para permitir al usuario seleccionar rápidamente entre un pequeño número de opciones (como 3-10).

¿Cómo se codifica?

+0

Esto es lo que debería parecer el selector: http://images.macworld.com/images/reviews/graphics/143531-dr_dof_original.jpg – Donna

Respuesta

-12

¿Alguna vez ha considerado tomar una vista de tabla y rotarla?

No lo creo. Ve a probar eso. :)

+0

Probablemente no quisiera rotar toda la vista de tabla. (Y tienen las "filas" que van de arriba a abajo en la pantalla.) Pero ... tal vez los desarrolladores están rotando el selector ... y de alguna forma cómo cambiar el tamaño para que quepa en una fila de la tabla- ver. Pero, ¿cómo se vería el código? – Donna

+0

¿Por qué no tratas de escribirlo y descubrirlo por ti mismo? Esa es la única forma en que vas a aprender algo. – Sneakyness

+0

Recomiendo leer toda la documentación de Apple en http://developer.apple.com en la sección de iPhone para comenzar, ambos con programación de iPhone y Objective-C. – Sneakyness

0

Pruebe una vista de desplazamiento paginado que tiene los elementos que desea en una por página, y quizás superponga una imagen encima si desea gráficos más agradables para su control, y solo permita el desplazamiento horizontal (no haga el tamaño del contenido de la vista de desplazamiento más alta que el tamaño de la vista real, y deshabilitar el desplazamiento vertical de desplazamiento en el control).

3

Puede hacer esto tomando un UIPickerView regular, ajustando su ancho (a través de setFrame:), y luego aplicando un NSAffineTransform para rotarlo 90º. Luego deberá girar cada elemento en el selector 90º en el otro sentido.

Es un poco tedioso hacerlo correctamente, pero se puede hacer.

+0

¿Las letras tampoco girarán 90 grados? Creo que es una vista personalizada en la captura de pantalla. –

+0

@Alex sí, por lo que debe girar cada 'viewForRow: forComponent: reusingView:' en 90º en el otro sentido. –

6

Continuando con la respuesta de Dave DeLong lo tengo trabajando así ......

En viewDidLoad lo hice ...

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; 
    } 

Esperanza esto ayuda

+1

Para CGAffineTransform no olvide agregar QuartzCore Framework a su proyecto –

+0

¿Puede explicar el 3.14159/2? (Sé su PI, pero ¿por qué está aquí y por qué el/2)? –

+1

lo hice para que el selector gire 90 grados, por lo tanto se desplazará horizontalmente y 3.14159/2 es el valor de 90 grados en resplandor –

0

probar este -> Cree un UIVew simple del tamaño de UIPickerview, agregue selector en él. establecer numberOfComponentsInPickerView = 1. establecer ancho de componentes. A continuación, agregue pequeñas subvistas en él para ocultar el resto del selector. Solo la rueda giratoria del componente debe ser visible. Transforma la vista normal para girarla 90 grados.

Asegúrese de aplicar TRANFORM en:

-(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; 
} 

Ahora puede agregar vista Palin como subvista para selector horizontal en cualquier punto de vista.

0

Deberá crear el programa selector automáticamente, para que pueda crear su propio selector de tamaño con CGRectMake(x, y, width, height), deberá rotarlo, pero rotarlo también girará en los métodos dataSources del selector, tendrá que girar el vista inversa de la rotación del selector, estoy incluyendo código hopfully que ayudará

..... 
... 
... 
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

@ código de Madhup me llevan en la dirección general que quería cuando buscaba la horizontal UIPickerView pero luego me di cuenta de la pregunta no era realmente dirigido para cualquier persona que estaba buscando una respuesta más adecuada para la rotación de izquierda a derecha. El código en las respuestas que había leído era todo para habilitar el deslizamiento de izquierda a derecha, haciendo que el selector empujara las etiquetas/filas con valores más altos a la izquierda de la vista.Cualquier manera que aquí está mi contribución:

En el método 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; 

El método pickerView 's:

-(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 se encuentra el código fuente para el Selector de que está alineada horizontalmente.

+0

No se puede desplazar horizontalmente. Tienes que tocar cada celda para desplazarte. – chicobermuda

Cuestiones relacionadas