TL; DR 업데이트 : 기본적으로 iOS가 "앱 시작"애니메이션을 완료 할 때까지 코드를 지연시키는 것이 좋습니다.UIApplicationDidBecomeActiveNotification 및 setRightBarButtonItem : 애니메이션 :
내 앱이 활성화되면 탐색 바의 콘텐츠에 애니메이션을 적용하고 싶습니다. 내 컨트롤러에서 나는 UIApplicationDidBecomeActiveNotification
에 가입하고 setRightBarButtonItem:animated:
을 사용하여 변경 작업을 수행합니다.
문제는 애니메이션이 적용되지 않는다는 것입니다.
나는 약간의 실험을했으며 조금 기다리면 () 아무런 문제없이 움직이는 것을 발견했습니다. 내가 스레드를 차단 또는 고정 지연 후 변경 사항을 수행하는 것보다 더 나은 해결책을 찾을 싶습니다
@interface TESTViewController()
@property (strong, nonatomic) IBOutlet UINavigationBar *navigationBar;
@end
@implementation TESTViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UINavigationItem *item = [UINavigationItem new];
UIBarButtonItem *oldItem = [[UIBarButtonItem alloc] initWithTitle:@"Old" style:UIBarButtonItemStyleBordered target:nil action:NULL];
[item setRightBarButtonItem:oldItem];
[[self navigationBar] setItems:@[item] animated:NO];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActiveNotificationAction:) name:UIApplicationDidBecomeActiveNotification object:nil];
}
- (void)applicationDidBecomeActiveNotificationAction:(NSNotification *)notification
{
// [NSThread sleepForTimeInterval:.3];
UIBarButtonItem *newItem = [[UIBarButtonItem alloc] initWithTitle:@"New" style:UIBarButtonItemStyleBordered target:nil action:NULL];
[[[self navigationBar] items][0] setRightBarButtonItem:newItem animated:YES];
}
@end
:
다음은 문제를 보여주는 간단한 뷰 컨트롤러입니다.
보기가 나타나기 전에 응용 프로그램이 '활성'상태가됩니다. 단순히 'applicationDidBecomeActiveNotificationAction'에서'viewDidAppear'으로 애니메이션 코드를 이동하지 마십시오. –
@rokjarc 나는 사랑하고 싶습니다. 문제는 앱으로 다시 전환 할 때'viewDidAppear :'이 호출되지 않는다는 것입니다. BTW,'viewDidAppear :'name은 약간 오도 된 것입니다 (http : // stackoverflow를보십시오.com/questions/5417318/viewdidappear-not-firing-ever-again-after-app-enter-foreground)가 있습니다. –
아, 네. 얼마 전에 그 해결 방법을 보았다는 것을 알고 있습니다. 나는 UINavigationController (뷰 계층 구조에서 사용되지 않더라도)와 관련이 있다고 믿는다. 그것을 찾으려고 노력할 것입니다. –