使用UIAlertView中等待计算/处理数据

我已经成立了一个标签布局我的iPhone应用程序,我想执行一些相当激烈计算(可能需要几秒钟才能得到一个结果),当用户选择一个选项卡。

最初,它会出现在iPhone将只是挂在原来的选项卡上,而这样做的数字运算。

我尝试添加一个UIAlertView中一些养眼的,但我得到一个渐渐变灰了几秒钟,再经过运算完成后,查看的快速出现/消失。 我想看到的是UIAlertView中出现/动画当用户触摸选项卡,然后消失,一旦计算完成

- (void)viewDidAppear:(BOOL)animated { UIAlertView *baseAlert = [[[UIAlertView alloc] initWithTitle:@"Calculating" message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil]autorelease]; [baseAlert show]; UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; aiv.center = CGPointMake(baseAlert.bounds.size.width /2.0f, baseAlert.bounds.size.height - 40.0f); [aiv startAnimating]; [baseAlert addSubview:aiv]; [aiv release]; /*** calculation and display routines***/ [baseAlert dismissWithClickedButtonIndex:0 animated:YES]; }

我已经看到了这个帖子,但我似乎无法弄清楚它是如何应用到我的情况。

--------------解决方案-------------

要解决这个最简单的方法是用块; 使用第一块第一时间表计算,以单独的线程,当完成罢免警报视图通过对主线程块调度:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{

// Do calculations

dispatch_async(dispatch_get_main_queue(), ^
{
[baseAlert dismissWithClickedButtonIndex:0 animated:YES];
});
});

你需要了解事件循环是如何工作的。 当你调用[baseAlert show] ,警报视图添加到视图层次,但它实际上并没有绘制到屏幕,直到当前的代码块结束,控制返回到事件循环。 通过询问警报视图,显示后立即做你的计算,你是防止警报从不断出现。

这有点像写了一封信,告诉您打算粉刷你家的人,花一个星期画你的房子,然后写另一封信,说你做到了然后以字母和邮箱中的拖放在交付同时。

如果你有一个昂贵的计算,最简单的方法来处理它的iOS 4和更高版本是把一个代码块调度队列,所以工作会在后台线程来完成,而主线程仍然可以更新屏幕并响应手指水龙头。

[baseAlert show];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
// we're on a secondary thread, do expensive computation here
// when we're done, we schedule another block to run on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
// this code is back on the main thread, where it's safe to mess with the GUI
[baseAlert dismissWithClickedButtonIndex:0 animated:YES];
});
});

什么是可能发生的是,“激烈的计算”你做在同一个线程正在运行的,你要调用的UIAlertView中。 设置委托UIAlertView中就设置了一个单独的线程,这样你就不需要担心竞争,以及是否会UIAlertView中计算前露面。

另外,使用UIAlertView中是一个相当沉重的霸道做法 - 也许当你紧缩一些数字,你可以使用一些其他的界面元素来显示进度,而不是渲染应用无用的?

分类:iphone 时间:2015-03-15 人气:3
本文关键词: iphone,UIAlertView中
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.095 (s). 10 q(s)