Как обновить экран перед применением приложения DidBecomeActive? - PullRequest
4 голосов
/ 05 мая 2011

Мне нужно что-то скрыть на экране, когда пользователь активирует приложение, переключив его на передний план.

Я попытался вставить свой код в applicationDidBecomeActive или applicationWillEnterForeground, и хотя он работает нормально, старый экран стекст, который я хочу скрыть, отображается на мгновение.

Как скрыть поле до перерисовки экрана?

Спасибо

iphaaw

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Напишите некоторый код в applicationWillResignActive:, чтобы «спрятать» все, что вам нужно скрыть.

2 голосов
/ 05 мая 2011

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

Единственный способ, по моему мнению, сделать это - скрыть / скрыть ваш взгляд в тот момент, когда приложение переходит в фоновый режим.

0 голосов
/ 17 сентября 2013

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

Я часто реализую собственный контроллер базового представления в своих приложениях для iOS. Поэтому вместо того, чтобы иметь дело с applicationDidBecomeActive: или applicationWillResignActive:, я настраиваю этот контроллер представления для прослушивания эквивалентных уведомлений:

@interface BaseViewController : UIViewController

- (void)prepareForGrantingAccessWithNotification:(NSNotification *)notification;

- (void)grantAccessWithNotification:(NSNotification *)notification;

@end


@implementation BaseViewController

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];

  [self addNotificationHandler:@selector(grantAccessWithNotification:)
               forNotification:UIApplicationDidBecomeActiveNotification];

  [self addNotificationHandler:@selector(prepareForGrantingAccessWithNotification:)
               forNotification:UIApplicationWillResignActiveNotification];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)prepareForGrantingAccessWithNotification:(NSNotification *)notification {
  // Hide your views here
  myCustomView.alpha = 0;

  // Or in my case, hide everything on the screen
  self.view.alpha = 0;
  self.navigationController.navigationBar.alpha = 0;
}

- (void)grantAccessWithNotification:(NSNotification *)notification {
  // This is only necessary in my case
  [self presentBlockCodeScreen];
  self.view.alpha = 1;
  self.navigationController.navigationBar.alpha = 1;
  ...
}

@end
...