Ben*_*Ben 5 uinavigationitem uiactivityindicatorview ios6
从iOS 6开始就遇到了这个问题.我无法弄清楚是什么原因会导致这种行为发生变化.这曾经在5中完美地运作.现在活动指标不及时或根本没有出现.任何帮助将非常感激.
-(void)myMethod
{
UIView *currentTitleView = [[self navigationItem] titleView];
// Create an activity indicator and start it spinning in the nav bar
UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[[self navigationItem] setTitleView:aiview];
[aiview startAnimating];
// Start of Block code
void (^block)(arg1, arg2) =
^(arg1, arg2)
{
block code;
[aiview stopAnimating];
[[self navigationItem] setTitleView:currentTitleView];
};
// End of Block code
}
Run Code Online (Sandbox Code Playgroud)
听起来像是myMethod从后台线程调用的。作为一般规则,与 UIKit 元素(包括UIActivityIndicatorView)的所有交互都应始终在主线程上完成。尝试使用 GCD 将 UI 代码移动到主队列(也称为主线程)。
-(void)myMethod {
dispatch_async(dispatch_get_main_queue(), ^{
UIView *currentTitleView = [[self navigationItem] titleView];
// Create an activity indicator and start it spinning in the nav bar
UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[[self navigationItem] setTitleView:aiview];
[aiview startAnimating];
});
// Start of Block code
void (^block)(arg1, arg2) =
^(arg1, arg2)
{
block code;
dispatch_async(dispatch_get_main_queue(), ^{
[aiview stopAnimating];
[[self navigationItem] setTitleView:currentTitleView];
});
};
// End of Block code
}
Run Code Online (Sandbox Code Playgroud)