如何让UIView立即显示?

时间:2010-04-14 09:00:09

标签: iphone objective-c uiview uiviewcontroller

我正在尝试在iPhone应用中创建活动指示器。问题是我无法让它出现在我希望它已经完成的实际任务之前。关于iPhone做什么的顺序有什么时髦吗?

这是我有问题的代码(在我的app委托中):

-(BOOL)showProgressView: (NSString *) message { 
self.progress = [[UIView alloc] initWithFrame:window.frame];

UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage    imageNamed:@"squircle.png"]];
[img setAlpha:0.5];
[img setFrame:CGRectMake(94, 173, 133, 133)];


UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(51.5, 51.5, 30, 30)];
spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;

[img addSubview:spinner];

[self.progress addSubview:img];


[spinner startAnimating];
[img release];
[spinner release];

[window addSubview:self.progress];

return YES;

}

然后我将此代码称为:

if ([appDelegate showProgressView:@"Loading..:"])
{

    //My actual code loads data and stuff here but that is not important
            //drawCtrl is a UIViewController subclass that is instantiated here 


    UINavigationController *navController = [appDelegate navigationController];
    [navController pushViewController:drawCtrl animated:YES];


    [drawCtrl release];
}

问题是我的活动指示器在新视图控制器被推送到navController的堆栈之前不会出现。我能以某种方式控制它吗?

提前致谢!

-Mats

1 个答案:

答案 0 :(得分:1)

您需要通过计时器定期调用您的加载方法。 UI更改需要通过事件循环进行查看。我通常在我在AppDelegate中设置的计时器中完成此操作,它每n秒调用一次“methodThatTakesSomeTime”,“methodThatTakesSomeTime”方法对指定的时间片执行一些工作,然后退出通常与计时器大致相同的时间触发时间。这给了事件循环时间来刷新UI,并给你的方法时间来完成它的工作。

花些时间保持“methodThatTakesSomeTime”的状态,以便它可以继续前进,但这就是它所需要的。