Плавный переход от стартового изображения к основному виду

Можно ли реализовать плавный переход при загрузке приложения от изображения запуска к первому просмотру?

Поведение по умолчанию — вкл/выкл, с немедленным изменением: появляется изображение запуска, затем оно мгновенно исчезает, позволяя главному контроллеру представления занять место. Я хотел бы реализовать некоторое затухание или увеличение или уменьшение масштаба.

Это возможно?

Благодарю вас!


person marzapower    schedule 10.06.2011    source источник


Ответы (4)


Нет поддержки фреймворка, но вы можете получить такой результат, если сделаете это самостоятельно, вручную. В зависимости от того, какое у вас изображение запуска и как выглядит ваш пользовательский интерфейс, вы можете сделать это по-разному, но в основном: загрузите свой первый контроллер представления и отобразите изображение default.png в представлении изображения, когда оно загружается. Затем анимируйте постепенное исчезновение этого изображения, чтобы показать ваш фактический пользовательский интерфейс.

person Ben Zotto    schedule 10.06.2011
comment
Кажется, это чистое и простое решение! - person marzapower; 11.06.2011

Изменен ответ Dancreek, чтобы сделать все это в приложении AppDelegate: didFinishLaunchingWithOptions. Мне это нравится, потому что код гарантированно запускается только при запуске приложения и не загрязняет ни один из контроллеров представления.

Это очень просто:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // set up your root view and stuff....

    //.....(do whatever else you need to do)...

    // show the main window, overlay with splash screen + alpha dissolve...

        UIImageView *splashScreen = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
    [self.window addSubview:splashScreen];        
    [self.window makeKeyAndVisible];

    [UIView animateWithDuration:0.3 animations:^{splashScreen.alpha = 0.0;}
                     completion:(void (^)(BOOL)) ^{
                             [splashScreen removeFromSuperview];
                     }
    ];
}
person n13    schedule 29.03.2012
comment
Мне пришлось изменить вашу строку addSubview на эту: [self.window addSubview:splashScreen]; но это сработало отлично - person codefinger; 26.04.2012
comment
@joekutner Да, оглядываясь назад, это более общее решение - добавить всплеск прямо в окно. Это всегда будет работать. То, что я сделал, сработало для меня, но это зависит от вашей первоначальной настройки представления. Я положил ваше решение в ответ, оно лучше;) - person n13; 27.05.2012
comment
Еще лучше, создайте отдельный UIWindow только для просмотра изображения-заставки и установите его уровень окна выше основного окна. Это гарантирует, что изображение останется наверху, даже если другие части вашего кода инициализации добавят дополнительные подпредставления в главное окно позже. - person Russ Egan; 27.02.2014

Вам повезло. Я только что сделал это несколько минут назад. Вам нужен экран-заставка. Изображение в вашем представлении, точно такое же, как изображение по умолчанию, загружаемое устройством. Затем в вашем приложении закройте его с помощью анимации затухания, вызываемой из функции viewDidAppear.

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self performSelector:@selector(killSplashScreen) withObject:nil afterDelay:1.0];

}

- (void)killSplashScreen {
    [UIView animateWithDuration:0.5 animations:^{splashScreen.alpha = 0.0;} completion:NULL];
}
person Dancreek    schedule 10.06.2011

Для этого мы часто используем что-то под названием «splashView». Он был написан Шеннон Эпплклайн и доступен по лицензии CC. Вам придется немного погуглить, чтобы найти его.

//
//  splashView.h
//  version 1.1
//
//  Created by Shannon Appelcline on 5/22/09.
//  Copyright 2009 Skotos Tech Inc.
//
//  Licensed Under Creative Commons Attribution 3.0:
//  http://creativecommons.org/licenses/by/3.0/
//  You may freely use this class, provided that you maintain these attribute comments
//
//  Visit our iPhone blog: http://iphoneinaction.manning.com
//
person picciano    schedule 10.06.2011