2

我尝试在我的应用程序的开头启动一个 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 上花费时间并阻止这种旋转)。我实际上从我的 AppDelegatedidFinishLaunchingWithOptions方法中删除了几乎所有内容。不再需要 RestKit 初始化,不再需要 PushNotification 注册。只有 ViewController 初始化。而那些 ViewController 什么也不做。

但我能做的是:在界面上添加一个什么都不做的虚拟按钮(没有 IBAction 没有 IBOutlet 什么都没有),然后在 iPhone 上触摸它。它转到突出显示,然后正常。但只要我触摸它(甚至在我离开屏幕表面之前),纺车就开始旋转!

这里发生了什么?

4

3 回答 3

0

刚刚尝试了您的代码,它立即为我制作动画。您是否在应用程序打开后立即同步加载任何内容?这可能会导致延迟。

于 2012-07-10T16:45:47.483 回答
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

});
于 2012-07-10T17:46:07.497 回答
0

找到了!跟踪此问题 1.5 天后...

我的 MainViewController 嵌入在 NavigationController 中,在其viewDidLoad.

碰巧viewDidLoad我在 NavigationController 上推送了一些启动画面,它以某种方式与视图混淆。

我在我的 SplashViewControllerdoFlip方法中使用(经过一些延迟后自动调用,~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]; 

抱歉“太具体”了,感谢大家的帮助。

于 2012-07-11T13:07:42.607 回答