2009-12-12 10 views
8

Widziałem go tylko w bardzo niewielu aplikacjach na iPhone'a, ale wygląda na to, że selektor obraca się w lewo/w prawo (zamiast góry/dołu).iPhone'owy widok uipicker, który obraca się poziomo?

Zwykle umieszczają go na 1 linii tabeliView ... aby umożliwić użytkownikowi szybkie wybieranie pomiędzy niewielką liczbą opcji (np. 3-10).

W jaki sposób jest to zakodowane?

+0

Oto, jak powinien wyglądać pricker: http://images.macworld.com/images/reviews/graphics/143531-dr_dof_original.jpg – Donna

Odpowiedz

-12

Czy kiedykolwiek zastanawiałeś się nad zrobieniem widoku stołu i obróceniem go?

Nie sądzę. Idź spróbuj tego. :)

+0

Prawdopodobnie nie chciałbym obrócić całego widoku tabeli. (I mają "rzędy" przechodzące od góry do dołu na ekranie). Ale ... może programiści obracają selektora ... i niektóre, jak zmienić rozmiar, aby zmieścić się w 1 rzędzie stołu widok. Ale jak wyglądałby kod? – Donna

+0

Dlaczego nie spróbujesz tego napisać i sam się o tym przekonasz? To jedyny sposób, żeby się czegoś nauczyć. – Sneakyness

+0

Zaleca się przeczytanie całej dokumentacji firmy Apple pod adresem http://developer.apple.com w sekcji na temat uruchamiania iPhone'a, zarówno w programowaniu iPhone'a, jak i Objective-C. – Sneakyness

0

Wypróbuj stronicowany widok przewijania, który zawiera żądane elementy na jednej stronie, i może nadstaw obraz powyżej, jeśli chcesz mieć ładniejszą grafikę dla kontroli i pozwalaj tylko na poziome przewijanie (nie zmieniaj wielkości treści przewijania jest wyższy niż rozmiar rzeczywistego widoku i wyłącza pionowe przewijanie pod kontrolą).

3

Możesz to zrobić, robiąc zwykły UIPickerView, dostosowując jego szerokość (poprzez setFrame:), a następnie stosując NSAffineTransform, aby obrócić go o 90º. Następnie musisz obrócić każdy przedmiot w zbieraczu o 90 ° w drugą stronę.

To trochę nudne, aby zrobić to poprawnie, ale można to zrobić.

+0

Czy litery nie obrócą się o 90 stopni? Myślę, że jest to niestandardowy widok na zrzucie ekranu. –

+0

@Alex tak, dlatego musisz obracać każdy 'viewForRow: forComponent: reusingView:' o 90º w drugą stronę. –

6

Kontynuując odpowiedź przez Dave DeLong mam to działa tak ......

W viewDidLoad Zrobiłem to ...

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

nadzieję, że to pomaga

+1

Dla CGAffineTransform nie zapomnij dodać QuartzCore Framework do swojego projektu –

+0

czy możesz wyjaśnić 3.14159/2? (znam jego PI, ale dlaczego jest tutaj i dlaczego/2)? –

+1

zrobiłem to tak, że zbieracz został obrócony o 90 stopni, a więc będzie przewijał w poziomie, a 3.14159/2 jest wartością 90 stopni w promieniowaniu –

0

Wypróbuj -> Utwórz zwykły UIVew o rozmiarze UIPickerview, dodaj selektor na nim. ustaw numberOfComponentsInPickerView = 1. ustaw szerokość komponentu. Następnie dodaj małe widoki podrzędne, aby ukryć resztę selektora. Tylko koło obrotowe składnika powinno być widoczne. Przekształć prosty widok, aby obrócić go o 90 stopni.

Upewnij zastosować tranform w:

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

Teraz można dodać widok Palin jako podrzędny do kompletacji poziomej na dowolnym widoku.

0

Będziesz musiał zaprogramować selektor, dzięki czemu będziesz mógł stworzyć własny sorter o rozmiarze CGRectMake(x, y, width, height), wtedy będziesz musiał go obrócić, ale obracanie będzie również obracać w metodach Picker's dataSources, będziesz musiał obrócić widok odwrotność rotacji oknie wyboru, jestem w tym kodzie hopfully pomoże

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

@ kodu Madhup wiodą mnie w ogólnym kierunku chciałem kiedy szukałem poziomej UIPickerView ale potem zrozumiał, że pytanie zadane nie było adresowane tak dla każdego, kto szukał bardziej odpowiedniej odpowiedzi na rotację od lewej do prawej. Kod w odpowiedziach, które przeczytałem, miał na celu umożliwienie przesuwania od lewej do prawej, powodując, że selektor przesuwał etykiety/wiersze z wyższymi wartościami po lewej stronie widoku.Wszelkie sposoby oto mój wkład:

W metodzie 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; 

Metoda 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 znajdziesz kod źródłowy Picker, który jest poziomo wyrównane.

+0

Nie można przewijać w poziomie. Musisz dotknąć każdej komórki, aby przewinąć. – chicobermuda

Powiązane problemy