2012-02-20 13 views
5

Po dotknięciu UIBarButtonItem w UIToolbar pojawia się efekt białego blasku.Sposób wyzwalania efektu hightlight na UIBarButtonItem

Czy istnieje możliwość wystrzelenia zdarzenia, aby pokazać ten efekt?

Nie chcę naciskać przycisku. Tylko efekt powinien być wyświetlany. Chcę wizualizować użytkownikowi, że za tym przyciskiem jest nowa treść.

Dzięki za pomoc!

Odpowiedz

2

Następująca metoda zakłada, że ​​korzystasz z właściwości toolbarItem kontrolera nawigacji, a przycisk, który chcesz podświetlić, jest ostatnim elementem w tej macierzy. Możesz go zastosować do dowolnego paska narzędzi, i jeśli to konieczne, wybierz inny indeks tablicy.

W tej chwili nie jest to dokładnie idealne, ponieważ animacja przesuwa nowy przycisk od lewej dolnej części ekranu. Myślę jednak, że można go wyłączyć przy niewielkim wysiłku.

Pamiętaj, że użyłem obrazu PeakJi.

Mam nadzieję, że to zadziała.

Enjoy,

Damien

- (void)highlightButton { 
    NSArray *originalFooterItems = self.toolbarItems; 
    NSMutableArray *footerItems = [originalFooterItems mutableCopy]; 
    [footerItems removeLastObject]; 

    NSString* pathToImageFile = [[NSBundle mainBundle] pathForResource:@"white_glow" ofType:@"png"]; 
    UIImage* anImage = [UIImage imageWithContentsOfFile:pathToImageFile]; 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:anImage]; 
    imageView.frame = CGRectMake(0, 0, 40, 40); 

    UIBarButtonItem *flashImage = [[UIBarButtonItem alloc] initWithCustomView:imageView]; 
    [footerItems addObject:flashImage]; 

    [UIView animateWithDuration:0.3 
          delay: 0.0 
         options: UIViewAnimationOptionCurveEaseOut 
        animations:^{ 
         self.toolbarItems = footerItems;      } 
        completion:^(BOOL finished){ 
         [UIView animateWithDuration:.3 
               delay: 0.0 
              options:UIViewAnimationOptionCurveEaseIn 
              animations:^{ 
               self.toolbarItems = originalFooterItems; 
              } 
              completion:nil]; 
        }]; 
} 
1

Dla pozycji Bar

[(UIButton *)[[toolbarItems objectAtIndex:1] customView] setImage:[UIImage imageNamed:@"highlight.png"] forState:UIControlStateNormal]; 

w ogóle - Zakładając, że mają przycisk

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self 
      action:@selector(someFunction:) 
forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Click here" forState:UIControlStateNormal]; 
button.frame = CGRectMake(0.0, 0.0, 100.0, 40.0); 
[self.view addSubview:button]; 

można w danym momencie, programowo wywołać tę funkcję:

[button setTitle:@"Look Here" forState:UIControlStateNormal]; 

lub jeżeli chcesz mieć podświetlony obraz

btnImage = [UIImage imageNamed:@"highlight.png"]; 
[button setImage:btnImage forState:UIControlStateNormal]; 

Bardzo prosta alternatywa:

Mimo to, można również ustawić przycisk tak:

- (void)highlightButton:(UIButton *)button { 
    [button setHighlighted:YES]; 
} 
+0

Dzięki za odpowiedź! Biały efekt blasku na pasku narzędzi jest domyślnie w pakiecie SDK iOS, nie mam żadnego highlight.png i musiałbym go utworzyć. Czy nie ma innego sposobu na wywołanie domyślnego efektu białego blasku? – Manni

+0

@Manni Właśnie zrobiłem highlight.png dla ciebie, LOL – PeakJi

4

Herezje "highlight.png", ja nie żartuję! (Choć może nie widząc go na białym tle.)

highlight.png screenshot

+8

Mogę potwierdzić, że nie żartuje :) –

1

Można spróbować odtworzyć nowy przedmiot przycisk paska z innym stylu, a następnie przypisać ją do tyłu. Mój eksperyment był:

W viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc] initWithTitle:@"Custom" 
                   style:UIBarButtonItemStylePlain 
                   target:self 
                   action:nil]; 
    self.navigationItem.rightBarButtonItem = rightBtn; 
    [rightBtn release]; 

    [self performSelector:@selector(highlight) 
       withObject:nil 
       afterDelay:2.0]; 
} 

A w metodzie podświetleniem:

- (void) highlight{ 
    UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc] initWithTitle:@"Custom" 
                   style:UIBarButtonItemStyleDone 
                   target:self 
                   action:nil]; 
    self.navigationItem.rightBarButtonItem = rightBtn; 
    [rightBtn release]; 
} 

Implementacja może być inna niż moja, ale tak długo, jak jesteś w porządku z realokacja przycisk bar , Myślę, że będzie działać zgodnie z oczekiwaniami. Powodzenia :)

0

Prosty ay jest init swoją UIBarButtonItem z CustomView CustomView (UIBUtton)

UIButton *favButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[favButton setFrame:CGRectMake(0.0, 100.0, 50.0, 30.0)]; 
[favButton setBackgroundImage:[UIImage imageNamed:@"bouton_black_normal.png"] 
      forState:UIControlStateNormal]; 
[favButton setBackgroundImage:[UIImage imageNamed:@"bouton_black_hightlight.png"] 
      forState:UIControlStateHighlighted]; 
[favButton setTitle:@"Add" forState:UIControlStateNormal]; 
[favButton setTitle:@"Add" forState:UIControlStateHighlighted]; 
[favButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
[favButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; 
[[favButton titleLabel] setFont:[UIFont boldSystemFontOfSize:13]]; 
[favButton addTarget:self action:@selector(doSomething) 
    forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithCustomView:favButton]; 
1

Jeśli masz kategorię:

#define HIGHLIGHT_TIME 0.5f 

@interface UIButton (Highlight) 
- (void)highlight; 
@end 

@implementation UIButton (Highlight) 

- (void)highlight { 
    UIButton *overlayButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    overlayButton.frame = self.frame; 
    overlayButton.showsTouchWhenHighlighted = YES; 
    [self.superview addSubview:overlayButton]; 
    overlayButton.highlighted = YES; 
    [self performSelector:@selector(hideOverlayButton:) withObject:overlayButton afterDelay:HIGHLIGHT_TIME]; 
} 

- (void)hideOverlayButton:(UIButton *)overlayButton { 
    overlayButton.highlighted = NO; 
    [overlayButton removeFromSuperview]; 
} 

@end 

to trzeba kod jak to ...

UIBarButtonItem *addButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)] autorelease]; 
self.navigationItem.rightBarButtonItem = addButton; 
[self.navigationController.navigationBar.subviews.lastObject performSelector:@selector(highlight) withObject:nil afterDelay:2]; 

... aby podświetlić przycisk na pasku nawigacji po 2 sekundach.

Powiązane problemy