2012-02-20 2 views
5

Когда вы нажимаете на UIBarButtonItem в UIToolbar, есть эффект белого свечения.Как активировать эффект hightlight на UIBarButtonItem

Есть ли возможность запустить мероприятие, чтобы показать этот эффект?

Я не хочу нажимать кнопку. Должен отображаться только эффект. Я хочу визуализировать пользователя, что за этой кнопкой есть новый контент.

Благодарим за помощь!

ответ

2

Следующий метод предполагает, что вы используете свойство toolbarItems контроллера навигации и что кнопка, которую вы хотите выделить, является последним элементом в этом массиве. Разумеется, вы можете применить его к любой панели инструментов и при необходимости выбрать другой индекс массива.

Прямо сейчас это не совсем идеально, потому что анимация перемещает новую кнопку в левом нижнем углу экрана. Тем не менее, я думаю, что его можно отключить с небольшим усилием.

Обратите внимание, что я использовал изображение PeakJi.

Я надеюсь, что это сработает для вас.

Наслаждайтесь,

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

Для элементов Бар

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

В общем - Если у вас есть кнопка

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

вы можете в любой заданной точке, программно вызвать эту функцию:

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

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

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

Очень простая альтернатива:

Тем не менее, вы можете также установить кнопку, как это:

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

Спасибо за ваш ответ! Эффект белого свечения на панели инструментов по умолчанию установлен в SDK iOS, у меня нет выделения highlight.png и его нужно будет создать. Нет ли другого способа запустить эффект белого свечения по умолчанию? – Manni

+0

@ Manni Я только что сделал highlight.png для вас, LOL – PeakJi

4

Херес "highlight.png", я не шучу! (Хотя вы не можете видеть его на белом фоне.)

highlight.png screenshot

+8

Я могу подтвердить, что он не шутит :) –

1

Вы можете попытаться воссоздать новый элемент кнопки бар с различным стилем, а затем передать его обратно. Мой эксперимент:

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

И в методе выделить:

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

Ваша реализация может отличаться от моего, но до тех пор, как вы хорошо с переназначение кнопки бар , Я думаю, что он будет работать так, как ожидалось. Удачи :)

0

Простой ау является инициализировать Ваш UIBarButtonItem с 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

Если у вас есть категория:

#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 

Тогда вам нужно код, как это ...

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

... чтобы выделить кнопку в навигационной панели через 2 секунды.

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