0

私の最初のビューでは、Web サーバーとデータベース機能がそのバックグラウンドで実行されている間、画像とアクション インジケーターが表示されます。機能が完了したら、アプリケーションがタブ ビューに移動するようにします。どうすればいいですか?

ビューの外観は次のとおりです。 ファーストビューとセカンドビュー

私が試したこと:

TabBarViewController *tab = [[TabBarViewController alloc]init];
[self presentViewController:tab animated:NO completion:nil];

[self performSegueWithIdentifier:@"first" sender:self];

これを行う方法を理解するのを手伝ってください。私はこの問題をグーグルで検索するのに何時間も費やしましたが、その方法がわかりませんでした。

ありがとう

編集:コードを追加

4

5 に答える 5

2

データをダウンロードしているので、以下の方法のようにダウンロード要求が終了したときに呼び出しを受けることができます

- (void)requestFinished:(ASIHTTPRequest *)request

この方法では、非常にうまくプレゼンテーションを行うことができますTabBarViewController

于 2012-10-22T11:06:44.763 に答える
1

うーん...入れたらどうなる?

 TabBarViewController *tab = [[TabBarViewController alloc]init];
 [self presentViewController:tab animated:NO completion:nil];

dispatch_async(dispatch_get_main_queue(), ^{
        //stop the loader once the database stuff has finished and get rid of the text
        [[self firstLoader]stopAnimating];
        self.downloadingLabel.text = @"";

        });

更新:この同期を実行する場合

dispatch_sync(a_queue、^ {wait_for_me();}); その後、VCを提示します。

于 2012-10-22T11:03:59.367 に答える
1

GCDを使用してこれを実現できます。

たとえば、firstViewControllerダウンロードをトリガーする場所では、次のことができます。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ [model downloadData]; dispatch_sync(dispatch_get_main_queue(), ^{ [self performSegueWithIdentifier:@"YourSegueIdentifier" sender:self]; }); });

downloadDataモデルで通知を使用できない場合は、メソッドが同期していると思います。データが取得さpostNamedNotificationれるNSNotificationCenterfirstViewController、通知に登録したり、通知を受信したりして、電話をかけることができます。performSegueWithIdentifier

于 2012-10-22T11:04:00.990 に答える
1

そのための別のメソッドを宣言できます。

関数が完了したら、以下のメソッドを呼び出します。

[self performSelector:@selector(gotonext:) withObject:nil afterDelay:4.0];

-(void)gotonext;
{
TabBarViewController *tab = [[TabBarViewController alloc]init];
[self presentViewController:tab animated:NO completion:nil];
}
于 2012-10-22T10:58:12.907 に答える
1

次のように、開始時に1つのsplashView Imageを取得します...

    @interface AppDelegate : UIResponder <UIApplicationDelegate>{
        UIImageView *splashView;
    }
    @property (nonatomic, retain) UIImageView *splashView;
    @end

AppDelegate.m ファイルで...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
    {
        splashView = [[UIImageView alloc] initWithFrame:iphoneFrame];
        splashView.image = [UIImage imageNamed:@"Default"];
        [self.window addSubview:splashView];
        [self.window makeKeyAndVisible];

        UIViewController *viewController1 = [[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil] autorelease];
                UINavigationController *navviewController1=[[UINavigationController alloc]initWithRootViewController:viewController1];
                navviewController1.title = @"FirstTitle";
        //        navviewController1.navigationBarHidden=YES;

        UIViewController *viewController2 = [[[yourviewController2 alloc] initWithNibName:@"yourviewController2" bundle:nil] autorelease];
                UINavigationController *navviewController2=[[UINavigationController alloc]initWithRootViewController:viewController2];
        //        navviewController2.navigationBarHidden=YES;
                navviewController2.title = @"SecondTitle";

        UIViewController *viewController3 = [[[yourviewController3 alloc] initWithNibName:@"yourviewController2" bundle:nil] autorelease];
                UINavigationController *navviewController3=[[UINavigationController alloc]initWithRootViewController:viewController3];
        //        navviewController3.navigationBarHidden=YES;
                navviewController3.title = @"ThirdTitle";

               //..... and so on depend on your requirement 

        self.tabBarController = [[[UITabBarController alloc] init] autorelease];
        self.tabBarController.viewControllers = [NSArray arrayWithObjects:navviewController1, navviewController2 , navviewController3 ,nil];
        [self performSelector:@selector(loadViewIphone) withObject:nil afterDelay:2.0];//**add this line at your all data are loading completed**
    } 
    else 
    {
        splashView = [[UIImageView alloc] initWithFrame:ipadFrame];
        splashView.image = [UIImage imageNamed:@"Default_iPad"];
        [self.window addSubview:splashView];
        [self.window makeKeyAndVisible];
        [self performSelector:@selector(loadViewIpad) withObject:nil afterDelay:2.0];
    }

    [self.window makeKeyAndVisible];
    return YES;
}

-(void)loadViewIphone 
{
    [splashView removeFromSuperview];

    [self.window addSubview:tabBarController.view];
    [self.window makeKeyAndVisible];   

    CATransition *animation = [CATransition animation];
    [animation setDelegate:self];   
    [animation setType:kCATransitionFromBottom];
    [animation setDuration:1.0];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                                  kCAMediaTimingFunctionEaseInEaseOut]];
    [[self.window layer] addAnimation:animation forKey:@"transitionViewAnimation"];


    [self.window makeKeyAndVisible];
}

これがお役に立てば幸いです...

于 2012-10-22T11:09:31.670 に答える