Как я могу отображать заставку дольше на iPhone?

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

Ответ 1

Ознакомьтесь с Руководством по человеческому интерфейсу Apple iPhone (HIG). "Заставка" не предназначена для брендинга или отображения логотипа, он должен выглядеть как условие по умолчанию для приложения, поэтому он начинает быстро запускаться.

Пребывание там дольше было бы нарушением HIG.

Ответ 2

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

Ответ 3

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

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

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


@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 в ресурсах

Ответ 4

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


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

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

KISS (Держите его простым и умным:) Я избегал фактического его наступления.

Ответ 5

Я сделал это довольно просто, установив, что мой 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 с плеером splash, 320x480. После 1-секундного NSTimer (похоже, что-то вроде этого мешает) он запускает timerFireMethod, настраиваемый метод, который просто вызывает

[self dismissModalViewControllerAnimated:YES];

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

Ответ 6

Несмотря на то, что это противоречит рекомендациям, но если вы все еще хотите сделать это, чем лучший подход, а не спать, будет

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

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

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

 NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow:3))

Ответ 7

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [NSThread sleepForTimeInterval:3.0];
}

Ответ 8

Сделайте ваше приложение занятым дольше.

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

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

Ответ 9

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

Ответ 10

Вот мой простой код заставки. "splashView" - это выход для просмотра который содержит логотип изображения, идентификатор UIActivityIndicator и ярлык "Загрузить.." (добавлено к моему "MainWIndow.xib" в IB). Индикатор активности установлен на "оживление" в IB, Затем я создаю отдельный поток для загрузки данных. Когда закончите, я удаляю splashView и добавьте мой обычный вид приложения:

-(void)applicationDidFinishLaunching:(UIApplication *)application {
    [window addSubview:splashView];
    [NSThread detachNewThreadSelector:@selector(getInitialData:) 
                                 toTarget:self withObject:nil];
}

-(void)getInitialData:(id)obj {
    [NSThread sleepForTimeInterval:3.0]; // simulate waiting for server response
    [splashView removeFromSuperview];
    [window addSubview:tabBarController.view];
}

Ответ 11

 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

Ответ 12

В Xcode 6.3 вы можете показать экран запуска screen.xib и даже поместить на него индикатор, сначала он покажет экран запуска по умолчанию, который он заменяет нить, чтобы пользователь не знал, что он изменился, а затем, если все загружается скрыть его:-)

    func showLaunchScreen() {
    // show launchscreen
    launchView = NSBundle.mainBundle().loadNibNamed("LaunchScreen", owner: self, options: nil)[0] as! UIView
    launchView.frame = self.view.bounds;
    self.view.addSubview(launchView)

    // show indicator
    launchScreenIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50)) as UIActivityIndicatorView
    launchScreenIndicator.center = CGPointMake(self.view.center.x, self.view.center.y+100)
    launchScreenIndicator.hidesWhenStopped = true
    launchScreenIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    launchView.addSubview(launchScreenIndicator)
    self.view.addSubview(launchView)
    launchScreenIndicator.startAnimating()

    self.navigationController?.setNavigationBarHidden(self.navigationController?.navigationBarHidden == false, animated: true) //or animated: false
}

func removeLaunchScreen() {
    println("remove launchscreen")
    self.launchView.removeFromSuperview()
    self.launchScreenIndicator.stopAnimating()
    self.navigationController?.setNavigationBarHidden(false, animated: true)
}

Ответ 14

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


-(void)applicationDidFinishLaunching:(UIApplication *)application {
    [NSThread sleepForTimeInterval:5];
    window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    [window setBackgroundColor:[UIColor yellowColor]];
    [window makeKeyAndVisible];
}

Как вы уже знаете, это ужасно плохая идея, но она должна работать нормально...

Ответ 15

просто закройте окно в течение нескольких секунд в методе applicationDidFininshLaunchings

пример: sleep (3)

Ответ 16

Согласно Apple HIG, вы не должны этого делать. Но если ваше приложение должно сделать это для определенной цели, вы можете сделать:

  • import < unistd.h > в вашем AppDelegate.m.
  • Напишите следующую строку в первом методе "application didFinishLaunchingWithOptions:"

    sleep(//your time in sec goes here//);

Ответ 17

Я сделал это, как показано ниже:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil];
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"splashView"];
    self.window.rootViewController = viewController;

Примечание. LaunchScreen - это борад с запуском, а splashView - это раскадровкаIdentifier

Ответ 19

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

Что касается следующего Apple HIG - посмотрите приложение iDisk (MobileMe); пока вы не зарегистрируете информацию о своем члене, приложение покажет типичный uitableview Default.png, прежде чем очень быстро покажет полноэкранный просмотр.

Ответ 20

То, что я сделал, представляет собой modalview-контроллер на начальном экране, а затем рассеивает его через несколько секунд

    - (void)viewDidLoad
{
    [super viewDidLoad];
    ....
  saSplash = [storyboard instantiateViewControllerWithIdentifier:@"SASplashViewController"];
    saSplash.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentModalViewController: saSplash animated:NO];
}

-(void) dismissSASplash {
    [saSplash dismissModalViewControllerAnimated:NO];

}

Ответ 21

Здесь уже есть много вариантов, но сегодня я столкнулся с cocoapod, который позволяет отображать содержимое вашего LaunchScreen.xib в качестве начального контроллера представления:

https://github.com/granoff/LaunchScreen (Также см. это сообщение в блоге от автора с больше деталей реализации.)

Это похоже на довольно простой способ сделать это и лучше, чем подавляющее большинство ответов, размещенных здесь. (Конечно, это было невозможно до появления файлов LaunchScreen.) Наверху можно отобразить индикатор активности (или что-то еще, что вы хотите).

Что касается того, почему вы хотели бы этого сделать, я удивлен, что никто не упомянул, что часто есть требования к издателям и/или партнерам в отношении такого рода вещей. Это ОЧЕНЬ распространено в играх, но также и в приложениях, финансируемых рекламой.

Также обратите внимание, что это действует на счетчик HIG, но тогда он ждет загрузки любого содержимого после запуска вашего приложения. Помните, что HIG - это рекомендации, а не требования.

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

Ответ 22

Swift 2.0

Используйте следующую строку в файле didFinishLaunchingWithOptions: delegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    NSThread.sleepForTimeInterval(5.0)
    return true
}

Но я рекомендую это:

Поместите свое изображение в полноэкранный режим UIImageView в виде подвекта в верхней части основного вида, таким образом, охватывая другой пользовательский интерфейс. Установите таймер, чтобы удалить его через несколько секунд (возможно с эффектами), показывая ваше приложение.

import UIKit
    class ViewController: UIViewController
    {
        var splashScreen:UIImageView!
        override func viewDidLoad()
        {
            super.viewDidLoad()
            self.splashScreen = UIImageView(frame: self.view.frame)
            self.splashScreen.image = UIImage(named: "Logo.png")
            self.view.addSubview(self.splashScreen)

            var removeSplashScreen = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: "removeSplashImage", userInfo: nil, repeats: false)
        }
        func removeSplashImage()
        { 
            self.splashScreen.removeFromSuperview()
        }
    }

Ответ 23

При запуске приложения отображается изображение по умолчанию (default.png).

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

Итак, по этой логике вы покажите изображение по умолчанию немного.

Ответ 24

Быстрая версия:

Добавьте эту строку в AppDelegate

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    NSThread.sleepForTimeInterval(2.0)//in seconds

    return true
}