1

私は一般的に、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 を指定する必要があると思いますが、おそらくコメントどおりに初期化する必要がありますが、移行なしで唯一の要件が set であることを考えると、これを行う方法がわかりませんreturn YES;

それが役立つ場合、これはストーリーボード プロジェクトです。Xcode 4.3.3 を実行しています。

再度、感謝します。

4

1 に答える 1

2

これは私がスプラッシュスクリーンを行う方法です:

表示される最初の画面ではなく、App Delegate には入れません。必要なのは、rootViewController の 2 つのインスタンス変数だけです。1 つ目は UIView *black で、2 つ目は 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;

        }];
    }];

});


}

ナビゲーション コントローラーまたはタブ ビュー コントローラーを備えたアプリでこのコードをテストしたことはありませんが、通常のビュー コントローラーでは魅力的に機能します。

于 2012-06-28T18:16:32.673 に答える