2009-12-12 3 views
8

Я видел это только в ОЧЕНЬ немногих приложениях для iPhone ... но он выглядит как сборщик, который вращается влево/вправо (вместо верхнего/нижнего).iphone uipickerview, который вращается горизонтально?

Обычно они помещают его на 1 строку таблицыView ..., чтобы позволить пользователю быстро выбирать между небольшим количеством вариантов (например, 3-10).

Как это закодировано?

+0

Вот что должен выбрать сборщик: http://images.macworld.com/images/reviews/graphics/143531-dr_dof_original.jpg – Donna

ответ

-12

Вы когда-нибудь рассматривали возможность взглянуть на стол и повернуть его?

Не думаю, что так. Попробуйте это. :)

+0

Возможно, мне не хотелось бы поворачивать весь настольный просмотр. (И иметь «ряды», идущие сверху вниз на экране.) Но ... может быть, разработчики поворачивают сборщик ... и некоторые, как изменить его размер до 1 строки таблицы, Посмотреть. Но каков будет код? – Donna

+0

Почему бы вам не попробовать и написать его и узнать сами? Это единственный способ научиться чему-либо. – Sneakyness

+0

Я бы настоятельно предложил прочитать всю документацию Apple по адресу http://developer.apple.com в разделе iPhone о начале работы, как с iPhone-программированием, так и с Objective-C. – Sneakyness

0

Попробуйте прокрутить прокрутку, у которой есть элементы, которые вы хотите по одному на страницу, и, возможно, наложите над ним изображение, если вы хотите получить более приятную графику для своего контроля и разрешите только горизонтальную прокрутку (не делайте contentSize прокрутки выше, чем размер фактического представления, и отключить вертикальное зависание прокрутки на элементе управления).

3

Вы можете сделать это, взяв обычный UIPickerView, отрегулировав его ширину (через setFrame:), а затем применив NSAffineTransform, чтобы повернуть его на 90º. Затем вам необходимо повернуть каждый элемент в сборщике на 90º другим способом.

Это немного утомительно, чтобы сделать это правильно, но это можно сделать.

+0

Будут ли буквы не поворачиваться на 90 градусов? Я думаю, что это нестандартный вид на скриншоте. –

+0

@Alex yes, поэтому вам нужно повернуть каждый элемент viewForRow: forComponent: reusingView: 'на 90º другим способом. –

6

Продолжая ответ на Дейве Делонг я получил это работает, как это ......

В viewDidLoad я сделал это ...

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

Надеется, что это помогает

+1

Для CGAffineTransform не забудьте добавить QuartzCore Framework в свой проект –

+0

вы можете объяснить 3.14159/2? (я знаю его PI, но почему он здесь и почему/2)? –

+1

Я сделал это так, чтобы сборщик повернулся на 90 градусов, и он будет прокручиваться горизонтально, а 3.14159/2 - значение 90 градусов в сиянии –

0

Попробуйте это -> Создайте Plain UIVew размера UIPickerview, добавьте в него подборщик. номер комплектаOfComponentsInPickerView = 1. комплект компонентный ширина. Затем добавьте небольшие суб-представления на него, чтобы скрыть остальную часть сборщика. Должно быть видно только вращающееся колесо компонента. Преобразовать простой вид, чтобы повернуть его на 90 градусов.

Убедитесь, что применять tranform в:

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

Теперь вы можете добавить вид Пэйлин как подвид для горизонтального подборщика на любом виде.

0

Вам необходимо будет создать программу выбора, чтобы вы могли создать свой собственный выбор размера с помощью CGRectMake(x, y, width, height), тогда вам придется вращать его, но вращение будет также вращаться в методах данных источников данных Picker, вам придется вращать вид обратного вращения сборщика, я в том числе кода hopfully это поможет

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

@ код Madhup водите меня в общем направлении, которое я хотел, когда я искал для горизонтального UIPickerView, но потом я понял, что вопрос, заданный на самом деле не адресовано так для всех, кто искал более подходящий ответ на поворот слева направо. Код в ответах, которые я читал, состоял в том, чтобы включить прокрутку слева направо, в результате чего сборщик нажимал метки/строки с более высокими значениями слева от представления.Любые способы, вот мой вклад:

В методе 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; 

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 вы найдете исходный код для Picker, который горизонтально выровненный.

+0

Нельзя прокручивать по горизонтали. Вам нужно нажать каждую клетку для прокрутки. – chicobermuda

Смежные вопросы