2013-08-22 48 views
39

Trên iOS 7, khởi chạy hình ảnh mờ dần thay vì biến mất ngay lập tức khi ứng dụng được tải.Hình ảnh khởi chạy iOS 7 (màn hình giật gân) mờ dần

Có bất kỳ cài đặt nào để ngăn hình ảnh khởi động này làm mờ hoạt ảnh không? Tôi cần nó biến mất ngay lập tức giống như trong iOS 6 trở về trước.

Sửa cho câu trả lời:

Vâng, chúng ta có thể thêm hình ảnh giật gân như một UIImageView vào cửa sổ trên và giấu nó sau khi hoạt hình splash phai được hoàn tất. Nhưng điều này gây ra một sự chậm trễ 0,4 giây mà tôi đang cố gắng để tránh.

+0

Cũng đừng mong đợi sử dụng để phá vỡ NDA, đặt cược tốt nhất của bạn là đặt câu hỏi này trên diễn đàn nhà phát triển – rckoenes

+4

Nó được hỏi khoảng một tháng trước nhưng không có phản hồi cho đến nay. Tin tưởng rằng nó hay không, Apple Dev Diễn đàn là nơi vô dụng nhất để thảo luận về phát triển iOS. – erkanyildiz

+2

Mặc dù nó là sự thật, mọi người có thể không muốn phá vỡ NDA bằng cách nói về nó ở đây. – rckoenes

Trả lời

-1

Tôi nghi ngờ có nhiều điều xảy ra ở đây. Đặt một số câu lệnh ghi nhật ký ngay khi bắt đầu chu kỳ ứng dụng, vì màn hình splash xuất hiện trong khi các phương thức App Delegate được gọi, đăng nhập ở đó và sử dụng Công cụ nếu cần để xem điều gì đang diễn ra tại thời điểm khởi chạy. Ngoài ra, hãy thử kết thúc đa nhiệm trên ứng dụng trước khi khởi chạy lại để xem điều đó có tạo ra sự khác biệt hay không và cũng thử một ứng dụng trống mới để xem trải nghiệm có giống nhau hay không. Bạn đã không chỉ ra những gì các ứng dụng hiện khi khởi động, nhưng là có bất kỳ hình ảnh động bạn đã mã hóa để ảnh hưởng đến mờ dần trong hoặc ngoài khi khởi động?

3

tôi đã cùng một vấn đề đang phát triển một ứng dụng với Cocos2d-x và có cửa sổ chính của tôi và nội dung OpenGL khởi tạo trong

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

Thay vào đó tôi chuyển nó đến phương pháp

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

và bây giờ nó không "phai" nữa. Lưu ý rằng sẽ thay vì đã làm. Tuy nhiên, phương pháp này có sẵn trên iOS6 và cao hơn, vì vậy nếu bạn muốn ứng dụng của mình tương thích với iOS5.x trở xuống, bạn chỉ có thể thực hiện kiểm tra phiên bản tiền xử lý < __IPHONE_6_0 và sử dụng phương thức "didFinishLaunching". ngay cả một vấn đề.

+0

Cảm ơn bạn! Điều này làm việc cho một bộ điều khiển xem tiêu chuẩn là tốt. –

+1

Nó làm việc cho tôi với cocos2d-x v2.2.5, nhưng nâng cấp lên 3.2 không thành công một lần nữa, và tôi thấy một màn hình màu đen mờ dần một lần nữa –

+0

Vâng, điều này không làm việc cho tôi. Vẫn mất dần trong v3.9 của Cocos2d-x. – aardvarkk

4

Trong iOS 7, màn hình giật gân mờ dần chuyển tiếp từ hình ảnh giật gân sang UIView đầu tiên của bạn. Nếu UIView đó trông giống hệt với màn hình giật gân, bạn sẽ thấy không mờ dần. Vấn đề là cái nhìn ban đầu của Cocos2D là màu đen thuần khiết.

Thật không may, cách duy nhất tôi tìm thấy để giải quyết vấn đề này là thêm UIImageView giống với hình ảnh giật gân trong một giây, sau đó xóa nó sau khi Cocos2D bắt đầu vẽ.

Trong CCDirectorIOS (hoặc lớp con của bạn):

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_WIDESCREEN (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height > 567.0f) 
static const NSInteger tempSplashViewTag = 87624; 

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

    NSString *spriteName = IS_IPAD ? @"Default-Landscape" : IS_WIDESCREEN ? @"Default-568h" : @"Default"; 
    UIImageView *splashView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:spriteName]]; 
    splashView.tag = tempSplashViewTag; 
    [self.view addSubview:splashView]; 

    [self startAnimation]; 
} 

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

    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     UIView *splashView = [self.view viewWithTag:tempSplashViewTag]; 
     [splashView removeFromSuperview]; 
    }); 
} 
+1

Xem bản chỉnh sửa của tôi trong OP. – erkanyildiz

+1

@erkanyildiz 0,4 giây bắt đầu từ khi nào? Tôi tìm thấy một thời gian ngắn hơn làm việc tốt từ - [viewDidAppear]. 0,4 giây là thời gian khá dài để chờ đợi. – Patrick

1

Tôi chỉ muốn xác nhận câu trả lời Patrick vì nó liên quan đến các ứng dụng Cocos2D, và thêm một vài chi tiết là tốt.

Hành vi thực sự dễ thấy nếu bạn chuyển đổi giữa trình mô phỏng 6.1 và trình mô phỏng 7.x - nút đầu tiên thực hiện chuyển đổi tức thì (có thể có đèn flash màu đen, vì lý do tương tự), trong khi 7.x giả lập không làm chậm và phiền nhiễu mờ dần, sau đó nhấp nháy trong cảnh Cocos2D của bạn.

Nếu bạn không muốn sửa đổi hoặc phân lớp các công cụ CCDirector, bạn cũng có thể sử dụng cùng mã của mình để sửa đổi AppDelegate của bạn. Trong trường hợp của chúng tôi, nó khá đơn giản để:

  1. Trong appDidFinishLaunching ...chúng ta đợi cho đến khi glView được tạo, sau đó thêm UIImage làm subview vào nó;
  2. Sau đó, chúng tôi tạo một thường trình "postDidFinish ..." và performSelector để gọi sau 0.1 giây hoặc lâu hơn. Trong đó, bạn có thể xóaFromSubview bằng cách sử dụng cùng một mã của mình.

Nó không phải là thanh lịch và vô hình khi thêm vào lớp CCDirector, nhưng nó khá dễ dàng để có được như là một sửa chữa nhanh chóng!

6

Tôi đã quản lý để làm điều đó trong AppController. Chỉ cần đặt mã này ngay sau khi tạo glView

UIImage* image = [UIImage imageNamed:[self getLaunchImageName]]; 
if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) 
{ 
    float screenScale = [[UIScreen mainScreen] scale]; 
    if (screenScale > 1.) 
     image = [UIImage imageWithCGImage:image.CGImage scale:screenScale orientation:image.imageOrientation]; 
} 
UIImageView *splashView = [[UIImageView alloc] initWithImage:image]; 
[viewController.view addSubview:splashView]; 
[splashView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.1f]; 

Thật dễ dàng. Chỉ cần có được hình ảnh khởi động và biến nó biến mất sau một sự chậm trễ. Bạn sẽ cần mã getLaunchImage (dựa trên this comment, không thử nghiệm với iPhone 6 hay 6 cộng)

-(NSString*)getLaunchImageName 
{ 

    NSArray* images= @[@"LaunchImage.png", 
         @"[email protected]", 
         @"[email protected]", 
         @"[email protected]", 
         @"[email protected]", 
         @"[email protected]~ipad.png", 
         @"[email protected]~ipad.png", 
         @"LaunchImage-700-Portrait~ipad.png", 
         @"LaunchImage-Portrait~ipad.png", 
         @"[email protected]~ipad.png", 
         @"[email protected]~ipad.png", 
         @"LaunchImage-Landscape~ipad.png", 
         @"LaunchImage-700-Landscape~ipad.png", 
         @"[email protected]", 
         @"[email protected]", 
         @"[email protected]", 
         ]; 

    UIImage *splashImage; 

    if ([self isDeviceiPhone]) 
    { 
     if ([self isDeviceiPhone4] && [self isDeviceRetina]) 
     { 
      splashImage = [UIImage imageNamed:images[1]]; 
      if (splashImage.size.width!=0) 
       return images[1]; 
      else 
       return images[2]; 
     } 
     else if ([self isDeviceiPhone5]) 
     { 
      splashImage = [UIImage imageNamed:images[1]]; 
      if (splashImage.size.width!=0) 
       return images[3]; 
      else 
       return images[4]; 
     } 
     else if ([self isDeviceiPhone6]) 
     { 
      splashImage = [UIImage imageNamed:images[1]]; 
      if (splashImage.size.width!=0) 
       return images[13]; 
      else 
       return images[14]; 
     } 
     else 
      return images[0]; //Non-retina iPhone 
    } 
    else if ([[UIDevice currentDevice] orientation]==UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)//iPad Portrait 
    { 
     if ([self isDeviceRetina]) 
     { 
      splashImage = [UIImage imageNamed:images[5]]; 
      if (splashImage.size.width!=0) 
       return images[5]; 
      else 
       return images[6]; 
     } 
     else 
     { 
      splashImage = [UIImage imageNamed:images[7]]; 
      if (splashImage.size.width!=0) 
       return images[7]; 
      else 
       return images[8]; 
     } 

    } 
    else 
    { 
     if ([self isDeviceRetina]) 
     { 
      splashImage = [UIImage imageNamed:images[9]]; 
      if (splashImage.size.width!=0) 
       return images[9]; 
      else 
       return images[10]; 
     } 
     else 
     { 
      splashImage = [UIImage imageNamed:images[11]]; 
      if (splashImage.size.width!=0) 
       return images[11]; 
      else 
       return images[12]; 
     } 
    } 
} 

-(BOOL)isDeviceiPhone 
{ 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
    { 
     return TRUE; 
    } 

    return FALSE; 
} 

-(BOOL)isDeviceiPhone4 
{ 
    if ([[UIScreen mainScreen] bounds].size.height==480) 
     return TRUE; 

    return FALSE; 
} 


-(BOOL)isDeviceRetina 
{ 
    if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && 
     ([UIScreen mainScreen].scale == 2.0))  // Retina display 
    { 
     return TRUE; 
    } 
    else           // non-Retina display 
    { 
     return FALSE; 
    } 
} 


-(BOOL)isDeviceiPhone5 
{ 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [[UIScreen mainScreen] bounds].size.height==568) 
    { 
     return TRUE; 
    } 
    return FALSE; 
} 

-(BOOL)isDeviceiPhone6 
{ 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [[UIScreen mainScreen] bounds].size.height>568) 
    { 
     return TRUE; 
    } 
    return FALSE; 
} 
+0

Cảm ơn bạn đã trả lời nhưng vui lòng xem chỉnh sửa của tôi. – erkanyildiz

+0

Xin lỗi, chỉnh sửa của bạn là gì? Tôi không thấy sự khác biệt –

+0

Tôi có nghĩa là chỉnh sửa về câu hỏi của tôi. – erkanyildiz

2

Nếu đó thực sự là mã của bạn, bạn có thể có một lỗi đánh máy trong tên hình ảnh. (Nếu không, hãy cho chúng tôi biết ý nghĩa "không hoạt động").

Ngoài ra, màn hình giật gân thường không xuất hiện mọi ứng dụngDidBecomeActive :. didFinishLaunchingWithOptions: là thời gian bạn biết rằng bạn đã được khởi chạy và màn hình splash đã được hiển thị thay cho bạn.

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [UIView animateWithDuration:0.2 
          delay:0 
         options: UIViewAnimationCurveEaseIn // change effect here. 
        animations:^{ 
         self.window.viewForBaselineLayout.alpha = 0; // and at this alpha 
        } 
        completion:^(BOOL finished){ 
        }]; 

    return YES; 
} 
Các vấn đề liên quan