2012-07-10 85 views
2

我嘗試在我的應用程序開始時啓動一個UIActivityIndi​​catorView,但它並沒有啓動!什麼時候UI準備好開始動畫UIActivityIndi​​catorView?

代碼在我的根視圖控制器:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIActivityIndicatorView *v = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

    [self.view addSubview:v]; 
    [v startAnimating]; 
} 

不旋轉。我試過viewWillAppear/viewDidAppear,不是更好。

如果我做一個performSelector:withObject:afterDelay:,當我達到類似延遲4或5秒的東西時,它現在可以工作......就像在UIKit中沒有初始化的東西一樣。

任何人有想法?

更新: 我可以等待,只要我想 - >它從未開始旋轉(因此沒有承擔MainThread時間和阻斷這種旋轉)。我實際上從我的AppDelegate didFinishLaunchingWithOptions方法中刪除了幾乎所有的東西。沒有更多的RestKit初始化,沒有更多的PushNotification註冊。只有ViewController初始化。而那些ViewController什麼也不做。

但我能做的是這樣的: 在界面上添加一個虛擬按鈕,什麼都不做(沒有IBAction沒有IBOutlet沒有),只需在iPhone上觸摸它。它會突出顯示然後正常顯示。但只要我觸摸它(即使在我離開屏幕表面之前),旋轉輪就開始旋轉!

這裏發生了什麼?

+0

你不需要給它一個框架嗎? – Luke 2012-07-10 16:47:03

+0

我將代碼簡化爲基本...這裏它將在左上方,但並不重要。看來,只是它不旋轉。 – malaba 2012-07-11 08:45:04

回答

0

找到它!在跟蹤這個問題1.5天之後...

我的MainViewController嵌入到NavigationController中,它的viewDidLoad中顯示了活動指示器。

它發生在同一viewDidLoad我推動了一些啓動畫面到NavigationController上,並以某種方式與視圖混淆。

我所用,在我SplashViewController doFlip方法(叫一些延遲後自動〜2秒):

[UIView transitionWithView:navController.view 
        duration:0.75 
        options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionTransitionFlipFromLeft 
       animations:^{ [nc popViewControllerAnimated:NO]; } 
       completion:nil]; 

現在使用

[UIView transitionFromView:splashVC.view 
        toView:mainVC.view 
        duration:0.75 
        options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionTransitionFlipFromLeft 
       completion:nil]; 

[navController popViewControllerAnimated:NO]; 

對不起, 「太具體」,並感謝大家的幫助。

0

剛剛嘗試過你的代碼,它立即爲我動畫。你是否在應用程序打開後立即同步加載任何內容?這可能會導致延遲。

0

我認爲您正在使用此代碼,因爲當您的應用程序加載時,它會執行某些操作需要一段時間。如果它正在主線程上執行此操作(因爲它應該是除非另有指定),那麼在執行該任務時,您的用戶界面將無響應,包括凍結所有動畫。要將任務推送到另一個線程,您必須使用Apple的Grand Central Dispatch(GCD)。要做到這一點使用是這樣的:

dispatch_queue_t myLongTaskQueue = dispatch_queue_create("AnyIdentifyingText", NULL); 
dispatch_async(myLongTaskQueue, ^{ 

    //perform the long task 

}); 

然後如果一個地方在長期的任務,你必須更新UI,你一定要做這回在主線程中使用:

dispatch_async(dispatch_get_main_queue(), ^{ 

    //perform UI update 

}); 
+0

我知道這件事。通常沒關係。但是在PushNotification,RestKit init等之間...也許某處正在發生。但是我已經在Xcode中停頓了一下,並在主線程中檢查了正在發生的事情。這似乎沒有...但我今天會仔細檢查。謝謝。 – malaba 2012-07-11 08:46:34

相關問題