iphone - 加载 ViewController 时显示事件指示器

标签 iphone

我有一个 ViewController,需要一些时间来加载其 View 。当我运行 Instruments 时,我从主屏幕上看到,如果我点击将该 View Controller 推送到堆栈上的图标,则一半会布局 View ,一半会获取 View 的数据。我尝试添加一个事件指示器,当按下按钮将 LongRunningViewController 插入堆栈时,该指示器会显示在按钮上方的主屏幕上。所以我基本上这样做:

- (IBAction)puzzleView:(id)sender {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.activityIndicator startAnimating];
    });

    PuzzleViewController *detailViewController = [[[PuzzleViewController alloc] init] autorelease];
    [self.navigationController pushViewController:detailViewController animated:YES];
    [self.activityIndicator stopAnimating];
}

按下按钮时主屏幕出现滞后,然后加载 View 。我试图在另一个屏幕准备被推送时显示事件指示器(或者至少我认为它是这样工作的)。但事件指示器不显示。我想知道这是否可以做到?或者其他应用程序是否推送他们的 ViewController,然后在该屏幕上,他们有事件指示器显示不同资源的加载情况?

最佳答案

当您说获取 View 数据需要时间时,我假设您的意思是 PuzzleViewController 在诸如 viewDidLoad 之类的地方做了一些不平凡的事情。

假设它在 viewDidLoad 中。然后你可以这样做:

-(void)viewDidLoad
{
  [self.activityIndicator startAnimating];
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
    {
         //do something expensive
         [self doSomethingExpensive];

         //dispatch back to the main (UI) thread to stop the activity indicator
         dispatch_async(dispatch_get_main_queue(), ^
         {
            [self.activityIndicator stopAnimating];
         });
    });
}

这意味着昂贵的操作将被放在后台线程上,并且不会阻止 View Controller 的加载/显示。

此方法在用户按下按钮时立即显示请求的 View ,并在该屏幕上显示进度。我认为这种方式比在呈现 View 之前加载内容时显示事件 View 更常见。这也为你赢得了更多的时间;您的长操作可以在过渡动画期间在后台运行!

您的事件 View 未显示您正在执行的操作方式的原因是您正在 UI 线程上执行所有操作;使用 dispatch_async 从主队列到主队列不会完成任何事情,因为在运行循环完成之前,您的 block 将没有机会运行。

关于iphone - 加载 ViewController 时显示事件指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573279/

相关文章:

iPhone webClip 浏览器应用建议

iPhone在xcode 4.2中切换屏幕

ios - iPhone - 重用 TableViewCells

iphone - 在ITunesConnect上载后无效的二进制文件

iphone - 从照片库访问特定相册中的照片

iphone - 将 UIWebView-heavy iPhone 应用程序移植到 Mac

iphone - 描边和填充不能一起工作 - Objective C

json - 使用逗号拆分 NSString

ios - Firebase 向 iOS 上的用户群发送通知不起作用

iphone - 与HTTP服务器保持持久连接以获得持续的流