Как можно дольше отображать заставку на iPhone? - PullRequest
49 голосов
/ 16 февраля 2009

Как я могу отображать заставку на более длительный период времени, чем время по умолчанию на iPhone?

Ответы [ 24 ]

39 голосов
/ 16 февраля 2009

Прочитайте Руководство по интерфейсу пользователя Apple iPhone (HIG). «Экран-заставка» не предназначен для брендинга или отображения логотипа, он должен выглядеть как стандартное состояние приложения, поэтому он запускается быстро.

Заставить его остаться там дольше было бы нарушением HIG.

26 голосов
/ 16 февраля 2009

Самый простой способ сделать это - создать UIImageView, изображение которого - ваш Default.png. В вашем методе applicationDidFinishLaunching: добавьте этот вид изображения в ваше окно и скройте его, когда вы хотите, чтобы ваш заставка исчезла.

21 голосов
/ 27 мая 2009

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

http://michael.burford.net/2008/11/fading-defaultpng-when-iphone-app.html

В интерфейсе вашего приложения Delegate:


@interface AppDelegate : NSObject 
{
  UIImageView *splashView;
}

В реализации:


@implementation AppDelegate
- (void)applicationDidFinishLaunching:(UIApplication *)application {


  // After this line: [window addSubview:tabBarController.view];

  splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
  splashView.image = [UIImage imageNamed:@"Default.png"];
  [window addSubview:splashView];
  [window bringSubviewToFront:splashView];

  // Do your time consuming setup

  [splashView removeFromSuperview];
  [splashView release];
}

Убедитесь, что у вас есть Default.png в ресурсах

18 голосов
/ 31 января 2011

в вашем appDelegate, есть метод applicationDidFinishedLaunching, использующий функцию сна. Передать цифру в функцию сна для нет. секунд вы хотите удерживать экран.


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{    
    [window makeKeyAndVisible];
    [window addSubview:viewController.view];
    sleep(5);
    return YES;
}

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

ПОЦЕЛУЙ (Сохраняй это простым и умным :) Я избегал фактического как его оскорбления.

14 голосов
/ 27 октября 2009

Я сделал это довольно просто, когда мой rootViewController выдвинул modalViewController, загружая из "Splash.nib" в подкласс UIViewController, который я назвал "SplashViewController". Точный звонок был:

- (void) viewDidLoad {
SplashViewController *splashScreen = [[[SplashViewController alloc]    
        initWithNibName:@"SplashViewController" bundle:nil] autorelease];
[self presentModalViewController:splashScreen animated:NO];
//continue loading while MVC is over top...

Когда вы запускаете приложение, оно всплывает, как на заставке. Тогда перо SplashViewController - это просто полноэкранный UIImageView с png-всплеском, 320x480. После 1-секундного NSTimer (что-то еще мешало) он запускает timerFireMethod, пользовательский метод, который просто вызывает

[self dismissModalViewControllerAnimated:YES];

Тогда модальный VC просто скользит вниз и покидает мой верхний tableView. Приятно то, что, пока MVC работает, базовая таблица может продолжать загружать из-за независимой природы контроллеров модального представления. Так что я не думаю, что это нарушает HIG и действительно позволяет быстрее запускать. Что бы вы предпочли посмотреть, симпатичную картинку или пустой вид по умолчанию (храп)?

14 голосов
/ 04 октября 2012

Даже если это противоречит рекомендациям, но если вы все еще хотите это сделать, лучше использовать не 100% *, а лучший подход

//Extend the splash screen for 3 seconds.
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];

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

ОБНОВЛЕНИЕ ДЛЯ SWIFT:

 NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow:3))
11 голосов
/ 27 августа 2012

Да, самый простой способ (не забудьте добавить свой default.png к целям -> [yourProjectName]: запускать изображения в 'xCode'):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [NSThread sleepForTimeInterval:3.0];
}
3 голосов
/ 18 июля 2009

просто используйте сон (время в секундах); в вашем приложении DidFinishedLaunching метод

3 голосов
/ 16 февраля 2009

Загрузка приложения занимает больше времени.

На полном серьезе Пол Томблин прав, что это обычно не очень хорошая идея. Default.png - это механизм, который заставляет ваше приложение загружаться быстрее, удерживая «пустой» снимок экрана. Использование его в качестве заставки является незначительным злоупотреблением, но намеренно заставлять этот заставку появляться дольше, чем нужно, почти нехорошо. (Это также ухудшит ваш пользовательский опыт. Помните, что каждую секунду, когда появляется заставка, пользователь с нетерпением смотрит на ваш логотип и клянется, что переключится на первого достойного конкурента, которого сможет найти.)

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

2 голосов
/ 13 ноября 2013
 Inside your AppDelegate.m

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Sleep is code to stop the slash screen for 5MoreSeconds
        sleep(5);

        [self initializeStoryBoardBasedOnScreenSize];
        return YES;
    }

// VKJ

...