Gyt*_*tis 0 cocoa-touch uiviewcontroller uiview ipad ios
我正在使用大图片(2000x2000,500kb)作为我的iPad应用程序中大多数视图控制器的背景图像.
问题是,该应用程序似乎冻结在父视图控制器,同时加载子视图控制器用这样一个形象的第一次(后来它的速度更快,由于缓存我承担).
我会在一个单独的线程中加载它,并在加载时显示一些指示器,但是我知道所有与UI相关的操作都应该在主线程上完成.
有没有办法改善用户体验,所以应用似乎没有冻结约.2秒?(在我的情况下,平铺图像不是一个选项)
所有UIKit操作都应该在主线程上完成是错误的!只应在主线程上执行绘图操作.完全保存在单独的线程中加载UIImage并在此之后将其交给主线程.但是我不认为加载需要那么长时间.我认为这可能是花费时间的绘图.
但是:作为一个UIActivityIndicatorView正在运行它自己的线程(作为所有CoreAnimation动画),它保持动画,即使你在添加指标后阻塞主线程.试试这个:
UIActivityIndicatorView* activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[activityIndicator startAnimating];
[self addSubview:activityIndicator];
dispatch_async(dispatch_get_main_queue(), ^{
UIImage* image = [UIImage imageNamed:@"MyImage"];
UIImageView* imageView = [[UIImageView alloc] initWithImage:image];
[self addSubview:imageView];
[activityIndicator removeFromSuperview];
});
Run Code Online (Sandbox Code Playgroud)
这将启动UIActivityIndicator并开始在下一个运行循环周期中加载图像.添加图像后,将删除超级视图.也许您必须再次调度活动指示器的移除,以便UIKit有时间绘制图像.在这种情况下,但[activityIndicator removeFromSuperview]在另一个dispatch_async到第一个块内的主队列.
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |