2012-02-20 16 views
5

Cuando toca UIBarButtonItem en UIToolbar, aparece un efecto de brillo blanco.Cómo activar efecto de hightlight en UIBarButtonItem

¿Existe la posibilidad de disparar un evento para mostrar este efecto?

No quiero presionar el botón. Solo se debe mostrar el efecto. Quiero visualizar al usuario, que hay nuevo contenido detrás de este botón.

Gracias por su ayuda!

Respuesta

2

El siguiente método supone que está utilizando la propiedad toolbarItems de un controlador de navegación y que el botón que desea resaltar es el último elemento de esa matriz. Puede aplicarlo a cualquier barra de herramientas, por supuesto, y elegir un índice de matriz diferente si es necesario.

Ahora mismo esto no es exactamente perfecto, porque la animación mueve el nuevo botón de la esquina inferior izquierda de la pantalla. Sin embargo, creo que se puede apagar con un poco de esfuerzo.

Tenga en cuenta que utilicé la imagen de PeakJi.

Espero que esto funcione para usted.

Disfrute,

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

Para elementos Bar

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

En Otros - Asumiendo que tiene un botón

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

puede en un momento dado, mediante programación llamar a esta función:

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

o si le gusta tener una imagen destacada

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

Una alternativa muy sencilla:

Dicho esto, también puede configurar el botón de la siguiente manera:

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

Gracias por su respuesta! El efecto de brillo blanco en la barra de herramientas está predeterminado en el SDK de iOS, no tengo ningún highlight.png y tendría que crear uno. ¿No hay otra manera de disparar el efecto de brillo blanco predeterminado? – Manni

+0

@Manni Acabo de hacer un highlight.png para ti, LOL – PeakJi

4

Aquí está el "highlight.png", no estoy bromeando! (Aunque es posible que no ver que en un fondo blanco.)

highlight.png screenshot

+8

Puedo confirmar que no está bromeando :) –

1

se puede tratar de volver a crear un nuevo elemento de botón de la barra con un estilo diferente, y luego reasignar de nuevo. Mi experimento fue:

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

Y en culminante método:

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

Su aplicación podría ser diferente a la mía, pero siempre y cuando usted está muy bien con el cambio de destino del botón de la barra , Creo que funcionará como se esperaba Buena suerte :)

0

Un ay simple es init su UIBarButtonItem con un 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

Si tiene una categoría:

#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 

Luego hay un código como éste ...

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

... para resaltar el botón en la barra de navegación después de 2 segundos.

Cuestiones relacionadas