【发布时间】:2013-07-24 17:47:35
【问题描述】:
当应用程序启动时,我以编程方式创建了许多具有透明背景颜色的复杂 UIView,每个都是应用程序中的“屏幕”(必须这样,因为下面有动画背景)。这会导致应用在静态启动图像上停留很长时间(大约 4 秒)。
我想在显示动画时创建所有 UIView。我无法在后台线程上创建 UIViews。我怎样才能做到这一点?
尝试 1:
-(void)viewDidLoad {
[super viewDidLoad];
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIView *baseView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 200, 100)];
[baseView setBackgroundColor:[UIColor blueColor]];
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 180, 80)];
[button setBackgroundColor:[UIColor redColor]];
[button setTitle:@"button" forState:UIControlStateNormal]; //doesn't work
[baseView addSubview:button];
dispatch_async( dispatch_get_main_queue(), ^{ //Finished
[self.view addSubview:baseView];
});
});
}
添加了按钮,但从未设置标题。点按后出现。
【问题讨论】:
-
背景是什么类型的动画?电影?您如何以编程方式创建视图?绘制矩形?有多少浏览量?它们重叠吗?
-
不,我需要在主线程上同时创建一个动画 UIView,因为正在创建许多 (10+) 复杂的 UIView。复杂的视图不应该是当前可见的,只是创建的。
-
UIView 包含其他 UIView,如 UIButton、UIImageView 和 UILabel。有很多,因为视图是游戏应用的完整“屏幕”。
-
虽然这不是您问题的答案...您提到“复杂的视图不应该是当前可见的,只是创建的”。您确定必须在应用启动时创建它们,并且不能在不减慢启动速度的更方便的时间创建它们吗?
-
也许,但我想避免在“屏幕”即将被查看之前加载它。我想不出适合装载的情况。是否有可能每个 runloop 只做一个“屏幕”,也给动画一些时间?
标签: ios objective-c multithreading uiview uikit