Заставка перед TabBarController - PullRequest
1 голос
/ 01 апреля 2011

Я новичок в разработке для iPhone и работаю над своими первыми приложениями. На самом деле, я уже хорошо создал приложение панели вкладок, но я хотел бы добавить заставку при запуске приложений.

Я нашел точный вопрос на Загрузка экрана приветствия (заставки) перед TabBarController

Но когда я пытаюсь вставить свой код, заставка не загружается и просто продолжает показывать мой tabbarcontroller.

Я создал SplashViewController.h, SplashViewController.m и SplashView.xib и следующий мой код,

#import "SplashViewController.h"
...
...

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
        // Override point for customization after application launch.
        SplashViewController *controller = [[SplashViewController alloc] initWithNibName:@"SplashView" bundle:nil];
        [self.tabBarController presentModalViewController:controller animated:YES];
        [controller release];
        // Add the tab bar controller's view to the window and display.
        [self.window addSubview:tabBarController.view];
        [self.window makeKeyAndVisible];

        return YES;
    }

Приложения работают без ошибок, но просто не могут загрузить заставку, любой комментарий очень важен. Спасибо!

Ответы [ 5 ]

3 голосов
/ 01 апреля 2011

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

0 голосов
/ 03 марта 2014

Я сделал это, и он отлично работает.

AppDelegate.h:

@interface AppDelegate_Pad : NSObject 
        <UIApplicationDelegate, SplashViewControllerDelegate> {
    UIWindow *window;
    UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    SplashViewController *svc = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil];
    svc.delegate = self;
    [self.tabBarController presentModalViewController:svc animated:NO];

    return YES;
}
-(void)splashViewControllerDidFinish:(SplashViewController *)splashViewController {
    [self.tabBarController dismissModalViewControllerAnimated:NO];
}

SplashViewController.h:

@protocol SplashViewControllerDelegate;
@interface SplashViewController : UIViewController {
    id<SplashViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id <SplashViewControllerDelegate> delegate;

@end
@protocol SplashViewControllerDelegate
-(void)splashViewControllerDidFinish:(SplashViewController *)splashViewController;
@end

SplashViewController.m:

// Call the below line where you want to remove splash view

    [self.delegate splashViewControllerDidFinish:self];
0 голосов
/ 11 апреля 2011

Отличный комментарий от Майка о том, как настроить заставку, чтобы сделать грязную заставку простой, создайте статическое изображение с именем Default.png и presto magico - все работает Оно должно отображаться максимум 5 секунд или до тех пор, пока приложение не загрузится. Я использовал размеры ширина х высота 320х480, и это в основном то, что мне было нужно.

Спасибо, Майк. !!

Кроме того, здесь есть полезная ссылка, которая сопровождает создание заставки, иконок и т. Д. Инструкции по созданию пользовательских значков и изображений

0 голосов
/ 01 апреля 2011

Если ваше требование состоит в том, чтобы отображать представление, пока пользователь не коснется его, предложение MetaLik будет работать. В качестве альтернативы вы можете добавить представление контроллера всплеска непосредственно в окно приложения.

 [self.window addSubview:MySplashController.view];

В любом случае вам потребуется создать кнопку или некоторый подкласс UIResponder для ответа на касание пользователя, а когда вы его получите, либо dismissModalViewController, либо [self.view removeFromSuperview], в зависимости от того, как вы его создали.

0 голосов
/ 01 апреля 2011

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

Редактировать: некоторый код, чтобы показать, что я имею в виду,

в вашем приложении делегат:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    SplashViewController *controller = [[SplashViewController alloc] initWithNibName:@"SplashView" bundle:nil];

    [self.window addSubview:controller.view];
    [self.window makeKeyAndVisible];
    [controller release];
}

В вашем всплывающем окне View Controller:

-(IBAction) didPressButtonToDismiss:(id)sender {

//create a reference to the singleton class for easier typing
MyAppDelegate *delegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate];

[delegate.window addSubview:delegate.tabBarController.view];
[delegate.window bringSubviewToFront:delegate.tabBarController.view];
[self.view removeFromSuperview];
}

Заметьте одно: я предполагаю, что вы инициализируете и настроите свой контроллер панели вкладок в кончике (как это видно из вашего первоначального поста).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...