Как запустить эффект подсветки на UIBarButtonItem - PullRequest
5 голосов
/ 20 февраля 2012

При нажатии на UIBarButtonItem в UIToolbar появляется эффект белого свечения.

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

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

Спасибо за вашу помощь!

Ответы [ 6 ]

4 голосов
/ 23 февраля 2012

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

highlight.png screenshot

2 голосов
/ 29 февраля 2012

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

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

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

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

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

Дэмиен

- (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 голос
/ 28 февраля 2012

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

#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 секунды.

1 голос
/ 27 февраля 2012

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

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

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

1 голос
/ 20 февраля 2012

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

 [(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 голосов
/ 28 февраля 2012

Простой способ - запустить 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];
...