2013-03-14 18 views
5

po prostu zastanawiasz się, ja dostosował UIBarButtonItems następujący sposóbJak ustawić iOS jako gradient na obrazie UIBarButtonItem?

+ (UIBarButtonItem *)createBarButtonItemWithTitle:(NSString *)t target:(id)tgt action:(SEL)a 
{ 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    UIImage *buttonImage = [[UIImage imageNamed:@"blabla.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)]; 


    CGRect buttonFrame = [button frame]; 
    buttonFrame.size.width = 35; 
    buttonFrame.size.height = buttonImage.size.height; 
    [button setFrame:buttonFrame]; 

    [button setBackgroundImage:buttonImage forState:UIControlStateNormal]; 

    [button addTarget:tgt action:a forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

    return buttonItem ; 
} 

Ale teraz nie mam cieniowanie/błyszczący efekt na obrazie przycisk tle ....

Czy istnieje sposób, aby zrobić to automatycznie, czy też muszę to zrobić programowo?

EDIT: Here is a capture, I used a simple green square to make it more obvious. There's no more shading/glossy effect

+0

Proszę udostępnić zrzut ekranu standardowego 'UIBarButtonItem', gdzie nie można tego zrobić za pomocą tylko obrazu. –

+0

ok, jak pokazano na obrazku, bez cieniowania/połysku. To prawdopodobnie normalne zachowanie, zastanawiam się tylko, czy mogę zrobić iOS, aby zrobił to automatycznie ... – Alex

+0

Jak widzę, standardowe przyciski mają taką samą wysokość, zauważ, jak wygląda efekt połysku - zawsze jest to poziome (o ile pamiętam). W takim przypadku należy dodać efekt połysku do obrazu i pozwolić mu skalować bez utraty jakości (dodając wypustki, aby pokryć krawędzie i obszary narożne). Działa szybko, świetnie wygląda, nie widzę potrzeby używania ani nawet tworzenia specjalnego kodu. –

Odpowiedz

0

Aby całkowicie dostosować przycisk bar w taki sposób, że trzeba dostarczyć coś innego niż płaskiego zielonego obrazu w „blabla.png”.

Innym sposobem radzenia sobie z tym problemem jest utworzenie przycisku z obrazem w stylu obramowania. Coś jak:

UIBarButtonItem* barButton = [UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"blabla.png"] style:UIBarButtonItemStyleBordered target:tgt selector:a]; 

Styl UIBarButtonItemStyleBordered daje ona podniesiona przycisk 3D-y wygląd. Możesz nadać jej wygląd pasujący do paska, jeśli chcesz.

+0

Dzięki za cynk. Niestety, uruchamiam Button, a nie UIBarButton, więc tworzy to nieprzyjemne ostrzeżenie. – Alex

+0

Cóż, chyba coś mi brakuje. Twój UIButton to tylko zielony obraz. Wtedy wygląda na to, że tworzysz z tego UIBarButtonItem. Po prostu pomiń UIButton i pracuj z UIBarButtonItem. –

+0

niezupełnie, używam UIButton do zainicjowania UIBarButton z tym niestandardowym UIView. Zajmuje się rozciąganiem obrazu, regulacją w zależności od długości tekstu itp. W przeciwnym razie nie ma metody prawidłowego przypisywania obrazu i zmiennej długości tekstu w tym samym czasie na UIBarButtonItem (przynajmniej nie znam tego) – Alex