Как включить анимацию кнопок после выхода из контроллера просмотра? - PullRequest
0 голосов
/ 12 августа 2011

У меня есть некоторая анимация, прикрепленная к пользовательской кнопке в контроллере вида:

- (void)viewDidLoad {
    [super viewDidLoad];    

    UIButton *natSenButton = [UIButton buttonWithType:UIButtonTypeCustom];
    natSenButton.frame = CGRectMake(114, 4, 93, 30);
    [natSenButton setTitle:@"Comment" forState:UIControlStateNormal];
    [natSenButton setTitleColor: [UIColor colorWithRed: 255 / 255.0 green:0 blue: 0 alpha:1.0] forState: UIControlStateNormal];
    // text: color with dark red

    [natSenButton addTarget:self action:@selector(displayNativeSentence) forControlEvents:UIControlEventTouchUpInside];
    natSenButton.tag = 333;

    [[natSenButton layer] setCornerRadius:8.0f];
    [[natSenButton layer] setMasksToBounds:YES];

    natSenButton.layer.borderWidth = 2.0; 
    natSenButton.layer.borderColor = 
    [UIColor colorWithRed: 25 / 255.0 green:255/ 255.0 blue: 255/255.0 alpha:1.0].CGColor; 
    // above is light blue color
    natSenButton.layer.backgroundColor = [UIColor colorWithRed: 255 / 255.0 green:255/ 255.0 blue: 255/255.0 alpha:1.0].CGColor;
    // background is white
    //  natSenButton.center = self.center;
    natSenButton.titleLabel.font = [UIFont systemFontOfSize:15.0];

   //Create an animation with pulsating effect
   CABasicAnimation *theAnimation;

   theAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
   theAnimation.duration=1.0;   
   theAnimation.repeatCount= 999;
   theAnimation.autoreverses=YES;   
   theAnimation.fromValue=[NSNumber numberWithFloat:1.0]; 
   theAnimation.toValue=[NSNumber numberWithFloat:0.2];

   [natSenButton.layer addAnimation:theAnimation 
                          forKey:@"animateOpacity"]; 
   [self.view addSubview:natSenButton];}

Однако иногда мне нужно скрыть эту кнопку:

for( UIView *view in self.view.subviews ) {  
        if( [view isKindOfClass:[UIButton class]] ) {  
            if( view.tag == 333 )
                [view setHidden:YES];
        }  
    }

... и затемчерез некоторое время мне нужно снова включить его:

for( UIView *view in self.view.subviews ) {  
        if( [view isKindOfClass:[UIButton class]] ) {  
            if( view.tag == 333 )
                [view setHidden:NO];
                [view setNeedsDisplay];  
        }  
    }

Все это работает нормально, кроме случаев, когда я нажимаю кнопку «Назад» и возвращаюсь к родительскому контроллеру представления, а затем возвращаюсь к этому viewController.В этих случаях мой "view setNeedsDisplay" больше не работает, а моя анимация не включена.

Вот где я создаю свой элемент задней панели в родительском контроллере представления:

- (id)init {
    [super initWithStyle:UITableViewStylePlain];

    [[self navigationItem] setTitle:@"Wordplay"];
    UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];      
    temporaryBarButtonItem.title = @"<"; 

    self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
    [temporaryBarButtonItem release];  

    return self;
}

.... и вот где родительский контроллер представления перемещает обратно в контроллер проблемного представления, которыйпотерял свою анимацию:

[[self navigationController] pushViewController:sentenceViewController animated:YES];

Может кто-нибудь сказать мне, почему я теряю свою анимацию и как я могу включить ее снова?Благодаря.

1 Ответ

0 голосов
/ 13 августа 2011

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

Вам необходимо удалить анимацию, когда вы нажимаете кнопку «Назад», чтобы вернуться к родительскому контроллеру представления, и снова добавить анимацию, когда вы возвращаетесь в контроллер представления с помощью кнопки анимации.

 [natSenButton.layer removeAnimationForKey:@"animateOpacity"];

Где разместить добавление / удаление звонков зависит от вас. Вы должны знать, что подходит вам больше всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...