IOS / Objective-C: изменение образа анимации в UIBarButtonItem

user6631314 спросил: 28 апреля 2018 в 09:04 в: ios

Я пытаюсь создать эффект, когда пользовательский образ в UIBarButtonItem изменится на другое изображение. До сих пор я смог получить первое изображение, чтобы раствориться со следующим кодом. Может ли кто-нибудь предложить, как я мог бы заставить второе изображение исчезать одновременно?

//Create barbuttonitem in viewwillappear
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
    [b setFrame:CGRectMake(12, 0, 22, 22)];
    [b addTarget:self action:@selector(menuButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [b setImage:[UIImage imageNamed:@"firstimage.png"] forState:UIControlStateNormal];
    UIBarButtonItem * myBarButton = [[UIBarButtonItem alloc] initWithCustomView:b];//Animate in viewDidAppaer [UIView animateWithDuration:1.0
                          delay:1.0
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{
                         self.myBarButton.customView.alpha = 0;
                     }
                     completion:^(BOOL finished) {
UIImage *secondImage = [UIImage imageNamed:@"menu2.png"];
    [self.myBarButton setImage:secondImage];//THis does not change image
                                 self.myBarButton.customView.alpha = 1;//no animation
                             }];

2 ответа

Есть решение
Prasad Parab ответил: 28 апреля 2018 в 10:17

Вы можете использовать что-то вроде этого

[UIView transitionWithView:self.myBarButton
                      duration:0.3
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{ [self.myBarButton setImage:secondImage];}
                    completion:nil];
user6631314 ответил: 28 апреля 2018 в 11:07
Я думаю, вы имеете в виду self.myBarButton.customView .... Однако ничего не происходит, так как я не мог установить изображение barButton в моей строке выше [self.myBarButton setImage: secondImage]; // Это не изменяет изображение. Я думаю, чтобы изменить изображение в барбуте, вам нужно сделать что-то более активное, поскольку barbutton не наследует UIView
Prasad Parab ответил: 28 апреля 2018 в 11:17
В вашем коде вы меняете изображение в блоке завершения. Это, несомненно, не приведет к какой-либо анимации. Попробуйте переместить этот код в блок анимации, как я сделал. Кроме того, поскольку вы добавляете пользовательскую кнопку в BarButtonItem, либо создайте свойство этой настраиваемой кнопки, либо получите доступ к ней с помощью viewWithTag: в customView barbutton. Это кнопка, изображение которой должно быть изменено.
user6631314 ответил: 28 апреля 2018 в 11:28
поэтому нет [сам.myBarButton комплектImage ...] но [self.b комплектImage ...]?
Prasad Parab ответил: 28 апреля 2018 в 03:08
Вот так. Надеюсь, поможет
IOS ответил: 28 апреля 2018 в 11:07
Try this code        @interface ViewController ()
        {
            UIBarButtonItem * myBarButton;
            NSTimer *time;
            UIButton *b;
        }
        @end        @implementation ViewController        - (void)viewDidLoad {
            [super viewDidLoad];
            b = [UIButton buttonWithType:UIButtonTypeCustom];
            [b setFrame:CGRectMake(12, 0, 22, 22)];
            [b addTarget:self action:@selector(menuButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
            [b setImage:[UIImage imageNamed:@"AddPlus_Yellow.png"] forState:UIControlStateNormal];
            myBarButton = [[UIBarButtonItem alloc] initWithCustomView:b];
            self.navigationItem.rightBarButtonItem=myBarButton;
            time = [NSTimer scheduledTimerWithTimeInterval: 2.0 target: self selector:@selector(onTick:) userInfo: nil repeats:NO];
            // Do any additional setup after loading the view, typically from a nib.
        }        -(void)onTick:(NSTimer *)timer {            [b setImage:[UIImage imageNamed:@"filter.png"] forState:UIControlStateNormal];
[time invalidate];        }