gpt4 book ai didi

ios - 执行许多阻塞主线程的 UIKit 操作

转载 作者:可可西里 更新时间:2023-11-01 05:41:29 24 4
gpt4 key购买 nike

应用程序启动时,我以编程方式创建许多具有透明背景颜色的复杂 UIView,每个都是应用程序中的“屏幕”(必须这样,因为下面有动画背景)。这会导致应用在静态启动图像上停留很长时间(大约 4 秒)。

我想在显示动画时创建所有 UIView。我无法在后台线程上创建 UIView。我怎样才能做到这一点?

尝试 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];
});

});
}

添加了按钮,但从未设置标题。点击后出现。

最佳答案

UIViews 在正常使用中不是线程安全的,所有交互都应该发生在主线程上。也就是说,您应该能够在某些后台线程(调度队列)上创建 View ,修改其参数,设置复杂的背景颜色等 - 只要 View 未连接到任何东西(并因此从 iOS 接收事件).一旦 View 完全设置和连接,然后将一个 block 与它分派(dispatch)到主队列,然后才将它作为 subview 添加到其他 View 。

我要做的是在设置初始视频剪辑后将所有这些工作分派(dispatch)到正常的优先级队列。当所有的 View 都被发送回主队列时(这样这项工作就完成了),您可以停止视频并开始与用户交互。

关于ios - 执行许多阻塞主线程的 UIKit 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17841234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com