2014-10-28 4 views
0

Позвольте мне начать с того, что следующее, что я знаю, нахмурено Apple и будет отклонено App Store, если оно представлено. Это не проблема, так как это не будет представлено в любом случае. Это внутреннее приложение.iOS 8 Всплеск изображений после запуска приложения

С этим теперь нет. Мне нужна помощь в настройке if, else и else if. До перехода на iPhone 6 и 6+ мой текущий код работает для iPhone5/5s и ниже размеров экрана при загрузке и отправке правильного изображения после запуска приложения.

Моя цель состоит в том, чтобы включить iPhone 6/6 + в это уравнение.

Ниже приведен соответствующий код, относящийся к этому.

Загружает изображения в соответствующий размер экрана.

//Setting Splash Images 
#define IS_IPHONE (!IS_IPAD) 
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone) 

    bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136)); 
    if (isiPhone5) { 

     // Load iPhone 5 Splash 
     UIImage *splash4Inch = [UIImage imageNamed:@"[email protected]"]; 
     self.splash4InchPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 568.0f)]; 
     [self.splash4InchPortrait setImage:splash4Inch]; 
     [self.view addSubview:self.splash4InchPortrait]; 
     [self.view bringSubviewToFront:self.splash4InchPortrait]; 
     self.splash4InchPortrait.contentMode = UIViewContentModeScaleToFill; 
    } 

    else if (IS_IPAD) { 
     // Load IPad Splash 
     UIImage *splashPad = [UIImage imageNamed:@"Default-Portrait~ipad.png"]; 
     self.splashPadPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 768.0f, 1024.0f)]; 
     [self.splashPadPortrait setImage:splashPad]; 
     [self.view addSubview:self.splashPadPortrait]; 
     [self.view bringSubviewToFront:self.splashPadPortrait]; 
     self.splashPadPortrait.contentMode = UIViewContentModeScaleToFill; 
    } 

    else { 
     // Load the iPhone 3.5" Splash 
     UIImage *splash35Inch = [UIImage imageNamed:@"Default.png"]; 
     self.splash35InchPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)]; 
     [self.splash35InchPortrait setImage:splash35Inch]; 
     [self.view addSubview:self.splash35InchPortrait]; 
     [self.view bringSubviewToFront:self.splash35InchPortrait]; 
     self.splash35InchPortrait.contentMode = UIViewContentModeScaleToFill; 
    } 

Это скрывает/скрывает указанные изображения в зависимости от размера экрана.

//Get screen size 
CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
if (UIDeviceOrientationIsPortrait(self.interfaceOrientation)){ 
    //DO Portrait 
    if (screenBounds.size.height <=480) { 
     //code for 3.5-inch screen 
     splash35InchPortrait.hidden = NO; 
     splashRetina35InchPortrait.hidden = YES; 
     splash4InchPortrait.hidden = YES; 

    }else{ 
     // code for 3.5 Retina inch screen 
     splashRetina35InchPortrait.hidden = NO; 
    } 

}else{ 
    // code for 4-inch screen 
    splash35InchPortrait.hidden = YES; 
    splashRetina35InchPortrait.hidden = YES; 
    splash4InchPortrait.hidden = NO; 

} 

Это код завершения при исчезновении изображения.

- (void)webViewDidFinishLoad:(UIWebView *)webview { 

#define IS_IPHONE (!IS_IPAD) 
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone) 

    bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136)); 
    if (isiPhone5) { 
     // Loading iPhone 5 
     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
     NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL], 
       ([email protected]"NO":@"YES")); 
    } 
    else if (IS_IPAD) { 
     // Loading IPAD 
     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
     NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL], 
       ([email protected]"NO":@"YES")); 
    } 
    else { 
     // Loading iPhone 3.5" 
     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
     NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL], 
       ([email protected]"NO":@"YES")); 
    } 

} 

Как вы можете видеть, я работаю, насколько это возможно. Мне нужно добавить код 6/6 +.

Или, если кто-нибудь знает более простой способ сделать это, я все уши.

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

Спасибо за чтение и помощь.

+0

Почему бы не использовать стандартные вещи, чтобы сделать заставку? почему вы делаете это в программе? –

+0

Хорошо, я думал, что я сделал эту часть прозрачной. В любом случае. То, что я пытаюсь сделать/сделал, - загрузочные изображения после запуска приложения. По сути, это эффект задержки при загрузке исходного веб-представления. Это позволяет избежать белой вспышки экрана, которая может раздражать. Я понимаю, что вы можете использовать каталог активов для загрузки изображений из ресурсов, а также создать файл запуска с помощью nib или xib, содержащих эти изображения. Но делать это остается. Код выше уже находится в контроллере представления, поэтому, когда приложение запускается, он вызывает этот код, показывает изображения и затем исчезает после загрузки моего веб-браузера. Имеют смысл? – ChrisOSX

ответ

0

Хорошо, так кружили на этом. У меня есть все, что я хочу. Задержка исчезла, все изображения добавлены, даже удалось удалить выделенный контроллер представления, вызывающий эти изображения. Нет нибов, xibs или раскадровки.

Как мое приложение настроено сейчас. У меня есть левый ящик, если я попал в ячейку, он загрузил бы это представление, но снова запустил бы заставку. Не идеально. Но теперь это прекрасно.

Вот что я сделал.

В моей AppDelegate:

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

//Removing splash screen user default on app launch 
    [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"Splash"]; 

    [self.window setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)]; 
    [self.window setBackgroundColor:[UIColor clearColor]]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

Посмотреть контроллер:

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     //Splash Screen View Controller defaults 
     if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"Splash"]]) { 
      [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"Splash"]; 
      [[NSUserDefaults standardUserDefaults] synchronize]; 

      self.splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
      [self.view setCenter:CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2)]; 
      [(UIImageView*)splashView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
      [self.splashView setContentMode:UIViewContentModeScaleToFill]; 
      [self.splashView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)]; 
      [self.splashView setBackgroundColor:[UIColor clearColor]]; 
      [self.view addSubview:splashView];   
     } 

    - (void)webView:(WKWebView *)webView didFinishNavigation: (WKNavigation *)navigation { 
     //Check here if still webview is loding the content 
     if (self.webView.isLoading){ 
      [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
     } 

     else { 
    //Splash Screen timer 
      timer = [NSTimer scheduledTimerWithTimeInterval:(1.0/1.0) target:self selector:@selector(tick) userInfo:nil repeats:YES]; 
     } 
    } 

    - (void) viewWillAppear:(BOOL)animated { 
     [super viewWillAppear:animated]; 
     [self.webView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)]; 

     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(didChangeOrientation:) 
                name:UIDeviceOrientationDidChangeNotification 
                object:nil]; 

     [self supportedInterfaceOrientations]; 
    } 

    -(BOOL)shouldAutorotate { 
     return YES; 
    } 

    - (void)didChangeOrientation:(NSNotification *)notification{ 
     [self setUpViewForOrientation:[[UIApplication sharedApplication] statusBarOrientation]]; 
    } 

    -(void)setUpViewForOrientation:(UIInterfaceOrientation)orientation { 
     [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 

     // 
     //Splash Screen Setup 
     // 
     CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; 
     CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width; 
     if(screenHeight < screenWidth){ 
      screenHeight = screenWidth; 
     } 

     if (UIInterfaceOrientationIsLandscape(orientation)) { 
      if (IS_IPHONE) { 

       if (screenWidth == 480){ 
        // iPhone 4/4s, 3.5 inch screen 
        UIImage *iPhone4 = [UIImage imageNamed:@"[email protected]"]; 
        [self.splashView setImage:iPhone4]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPhone 4/4s"); 
       } 
       if (screenWidth == 568){ 
        // iPhone 5/5s, 4.0 inch screen 
        UIImage *iPhone5 = [UIImage imageNamed:@"[email protected]"]; 
        [self.splashView setImage:iPhone5]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPhone 5/5s"); 
       } 
       if (screenWidth == 667){ 
        // iPhone 6, 4.7 inch screen 
        UIImage *iPhone6 = [UIImage imageNamed:@"[email protected]"]; 
        [self.splashView setImage:iPhone6]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPhone 6"); 
       } 
       if (screenWidth == 736){ 
        // iPhone 6+, 5.5 inch screen 
        UIImage *iPhone6Plus = [UIImage imageNamed:@"[email protected]"]; 
        [self.splashView setImage:iPhone6Plus]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPhone 6 Plus"); 
       } 
      } 

      else if (IS_IPAD) { 
       if ([UIScreen mainScreen].scale == 1){ 
        // iPad 2 
        UIImage *iPad = [UIImage imageNamed:@"LaunchImage-700-Landscape~ipad.png"]; 
        [self.splashView setImage:iPad]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPad"); 
       } 
       if ([UIScreen mainScreen].scale == 2) { 
        UIImage *iPad = [UIImage imageNamed:@"[email protected]~ipad.png"]; 
        [self.splashView setImage:iPad]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPad"); 
       } 

      } 
     } 
     else { 
      if (IS_IPHONE) { 

       if (screenHeight == 480){ 
        // iPhone 4/4s, 3.5 inch screen 
        UIImage *iPhone4 = [UIImage imageNamed:@"[email protected]"]; 
        [self.splashView setImage:iPhone4]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPhone 4/4s"); 
       } 
       if (screenHeight == 568){ 
        // iPhone 5/5s, 4.0 inch screen 
        UIImage *iPhone5 = [UIImage imageNamed:@"[email protected]"]; 
        [self.splashView setImage:iPhone5]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPhone 5/5s"); 
       } 
       if (screenHeight == 667){ 
        // iPhone 6, 4.7 inch screen 
        UIImage *iPhone6 = [UIImage imageNamed:@"[email protected]"]; 
        [self.splashView setImage:iPhone6]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPhone 6"); 
       } 
       if (screenHeight == 736){ 
        // iPhone 6+, 5.5 inch screen 
        UIImage *iPhone6Plus = [UIImage imageNamed:@"[email protected]"]; 
        [self.splashView setImage:iPhone6Plus]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPhone 6 Plus"); 
       } 
      } 

      else if (IS_IPAD) { 
       if ([UIScreen mainScreen].scale == 1){ 
        // iPad 
        UIImage *iPad = [UIImage imageNamed:@"LaunchImage-700-Portrait~ipad.png"]; 
        [self.splashView setImage:iPad]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPad"); 
       } 
       if ([UIScreen mainScreen].scale == 2){ 
        UIImage *iPad = [UIImage imageNamed:@"[email protected]~ipad.png"]; 
        [self.splashView setImage:iPad]; 
        [self.view addSubview:self.splashView]; 
        //NSLog(@"iPad"); 

       } 
      } 
     } 
    } 

    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
     [self setUpViewForOrientation:toInterfaceOrientation]; 
    } 

    - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
     [self setUpViewForOrientation:toInterfaceOrientation]; 
    } 

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
    } 

    //Image animation 
    - (void)tick { 
     if (!webView.loading) { 
      [self performSelector:@selector(fadeimage) withObject:nil afterDelay:0.0]; 
     } 
    } 
    -(void)fadeimage{ 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
     [UIView setAnimationDuration:0.3]; 
     [self.splashView setAlpha:0.0]; 
     [self.webView setAlpha:1.0]; 
     [UIView commitAnimations]; 

     [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 

     [self.webView setUserInteractionEnabled:YES]; 
     [self.view setUserInteractionEnabled:YES]; 
    } 

Довольно уверен, что это все. Надеюсь, это поможет кому-то столкнуться с подобной проблемой.

Смежные вопросы