从default@2x.png过渡到MainView

时间:2012-06-28 18:07:02

标签: iphone objective-c ios

我对Objective-C和iOS开发相对较新,并且非常感谢我的问题提供任何帮助和指导。

我已经编写了我的第一个应用程序,这是一个带有主视图和翻转视图的“实用程序”应用程序。该应用程序在模拟器和我的iPhone上按预期工作。但是,从Default.png图像到我的主视图有一个明显的突然变化。

我已经关注了来自https://stackoverflow.com/a/9918650/1324822的n13建议代码,但是,我得到的只是主视图,然后是淡出黑色。

我的代码,在AppDelegate.m文件中如下:

- (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];
                 }
 ];
return YES;
 }

我承认我正在“掠夺”我项目的这一部分,尽管我非常希望了解导致问题的原因以及解决方法。我希望我需要在上面的某处指定我的mainView,或者将其初始化为注释,但我不确定如何执行此操作,因为没有转换,唯一的要求是设置return YES;

如果有帮助,这是一个故事板项目。我正在运行Xcode 4.3.3。

再次感谢。

1 个答案:

答案 0 :(得分:2)

这就是我的启动画面:

我没有把它放到App Delegate中,而是放在第一个被查看的屏幕上。你需要的只是rootViewController中的两个实例变量,第一个是UIView * black,第二个是UIImageView * splash。然后:

-(void) viewWillAppear:(BOOL)animated {

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{

    self.view.userInteractionEnabled = NO;
    black = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    black.backgroundColor = [UIColor blackColor];


    splash = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [splash addSubview:indicator];
    indicator.center = CGPointMake([UIScreen mainScreen].bounds.size.width/2, 455);

    [indicator startAnimating];
    //the indicator part is arbitrary, of course

    splash.image = [UIImage imageNamed:@"Default.png"];

    [self.view addSubview:black];
    [self.view addSubview:splash];

});


}

然后:

-(void) viewDidAppear:(BOOL)animated {

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{



    [UIView animateWithDuration:0.4 delay:2 options:UIViewAnimationCurveEaseInOut animations:^{
        splash.alpha=0;
    } completion:^(BOOL finished) {
        [splash removeFromSuperview];

        [UIView animateWithDuration:0.45 delay:0.2 options:UIViewAnimationCurveEaseInOut animations:^{
            black.alpha = 0; 
        } completion:^(BOOL finished) {
            [black removeFromSuperview];
            black = nil;
            splash = nil;
            self.view.userInteractionEnabled = YES;

        }];
    }];

});


}

我没有使用具有导航控制器或标签视图控制器的应用程序测试此代码,但它的工作方式类似于带有常规视图控制器的魅力。