2014-09-15 16 views
23

Vì vậy, tôi đã có một giải pháp làm việc đầy đủ trong iOS7 hiển thị một LoginViewController thông qua presentViewController trong AppDelegate's didFinishLaunching.presentViewController trong AppDelegate với sự chậm trễ trong iOS8

Về cơ bản tôi đang làm một cái gì đó như thế này:

UIViewController *backgroundViewController = ... 
self.window.rootViewController = backgroundViewController; 
[self.window makeKeyAndVisible]; 

[self.window.rootViewController presentViewController:loginViewController 
              animated:NO ...] 

Trong iOS8 tôi thấy một bước nhảy. Đầu tiên tôi thấy backgroundViewController sau đó sau khoảng 1 giây để đăng nhập xuất hiện.

Vì vậy, làm cách nào để ngăn chặn bước nhảy này trong iOS8?

Tôi thấy rằng là a ton của developers với số này kind of problem nhưng vẫn không tìm thấy giải pháp.

+0

Bạn đã tìm thấy giải pháp chưa? Tôi đã thấy cùng một vấn đề với iOS 8 trên iPhone 5S. Nhưng Xcode 6 mô phỏng cho thấy hình ảnh động bình thường trên iPhone 6/6 + mô phỏng. – marsant

+0

Cũng đang tìm kiếm giải pháp – SomeGuy

+0

Trình giả lập cũng có vấn đề đó, nhưng bạn không thể nhìn thấy nó rõ ràng vì nó nhanh hơn. Giải pháp duy nhất tôi tìm thấy là tự tạo ra hoạt ảnh đó, thông qua bộ điều khiển xem bộ chứa. Tuy nhiên, giải pháp của tôi có một số vấn đề với tabviewcontrollers:/(viewDidAppear không được gọi khi chúng tôi thay đổi viewcontrollers) –

Trả lời

0

Tôi cũng đã phải đối mặt với cùng một vấn đề trong iOS8 và tôi thấy giải pháp này:

ABCViewController *obj = [[ABCViewController alloc] initWithNibName:@"ABCViewController" bundle:nil];       

CATransition *transition = [CATransition animation]; 
transition.duration = 0.4; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionMoveIn; 
transition.subtype = kCATransitionFromBottom; 
transition.delegate = self; 
[self.navigationControler.view.layer addAnimation:transition forKey:nil]; 
[appDelegate.navigationControler obj animated:NO]; 
obj = nil; 

tôi hy vọng giải pháp này có thể giúp bạn!

1

Bạn có thể đặt cửa sổ thành phiên bản của bộ điều khiển tạm thời.

self.window.backgroundColor = [UIColor whiteColor]; //do some styling etc. 
self.window.rootViewController = [LoginViewController new]; 
[self.window makeKeyAndVisible]; 

Từ bộ điều khiển đã đặt (LoginViewController), bạn có thể đẩy bộ điều khiển đăng nhập thực sự với quá trình chuyển đổi mong muốn. Khi chuỗi đăng nhập kết thúc, bạn có thể thực hiện chuyển đổi từ trình điều khiển đăng nhập sang trình điều khiển chế độ xem gốc của ứng dụng mặc định.

[UIView transitionWithView:[AppGlobal sharedApp].applicationWindow 
    duration:0.75 
    options:UIViewAnimationOptionTransitionFlipFromLeft 
    animations:^{ 
    [AppGlobal sharedApp].applicationWindow.rootViewController = [AppRootViewController new]; 
    } completion:nil]; 
2

Tôi có một sửa chữa nhanh chóng hacky:

//Make a screenshot of the ViewController first, or use a real image if you want 

__block UIImageView *fakeImageView = [[UIImageView alloc] initWithImage:image]; 
fakeImageView.frame = vc.view.frame; 
[self.view addSubview:fakeImageView]; 

[self presentViewController:vc animated:animated completion:^{ 
    [fakeImageView removeFromSuperview]; 
    fakeImageView = nil; 
}]; 

Nó không phải là tốt cho dài hạn, nhưng có thể nhanh chóng khắc phục vấn đề này mà không thay đổi quá nhiều mã.

Đang chờ giải pháp tốt hơn.

17

Cũng một hack (bây giờ), nhưng chỉ cần một dòng mã

Thêm quan điểm của bộ điều khiển xem bạn đang trình bày với các cửa sổ trước khi trình bày

UIViewController *viewController = [[UIViewController alloc] init]; 
[viewController.view setBackgroundColor:[UIColor greenColor]]; 

// Temporary iOS8 fix for 'presentation lag' on launch 
[self.window addSubview:viewController.view]; 

[self.window.rootViewController presentViewController:viewController animated:NO completion:nil]; 

Nếu bạn đang trình bày một bộ điều khiển điều hướng hơn là thêm chế độ xem của trình điều khiển điều hướng thay vì bộ điều khiển chế độ xem trên cùng của nó.

+0

Hoạt động. nhưng thanh trạng thái trở nên sôi nổi một chút. – markturnip

+0

@markturnip là liên quan đến màu sắc? Tôi đã nhận thấy điều này làm việc tốt nhất nếu màu sắc thanh trạng thái giữa cả hai bộ điều khiển xem là như nhau, bạn có nhận được hành vi lạ khác với thanh trạng thái không? – SomeGuy

+0

Điều này hoạt động nhưng như đã đề cập bởi @markturnip thanh trạng thái thay đổi màu =/ –

-3

Điều này sẽ hoạt động: gọi [loginViewController view] Trước khi trình bày.

Các vấn đề liên quan