gpt4 book ai didi

ios - 添加到 subview 的项目不会增量显示

转载 作者:行者123 更新时间:2023-12-03 17:21:53 26 4
gpt4 key购买 nike

我有一个线程正在将 UIView 元素添加到另一个父 UIView。我试图每秒添加这些,但是直到整个循环完成后它们才会显示。请参阅下面的代码。

-(void)buttonClicked:(id)sender {
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(addSubViews) object:nil];
[thread start];
}

-(void)addSubViews {
for(int i = 0; i < 10; i++) {
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(i, 0, 10, 10)];
[parentView addSubview:view];
[NSThread sleepForTimeInterval:1];
}
}

我希望看到这些 View 一次添加一个,每 1 秒一次。但是,在整个循环完成之前,父 View 上不会显示任何内容。有什么想法吗?

最佳答案

盖克。忘记你曾经了解过 sleep 。真的。

您无法从后台线程执行 UI 代码。

对应用 UI 的更改直到下一次事件循环才会生效。您需要返回并让系统处理您的代码。更像这样:

标题:

@interface MyVC: UIViewController
{
int viewIndex;
}

正文:

#define K_MAX_VIEWS 10

@implementation MyVC

-(void)buttonClicked:(id)sender
{
viewIndex = 0;
[self addViews];
}

- (void) addViews;
{
if (viewIndex < K_MAX_VIEWS)
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(i*15, 0, 10, 10)];
[parentView addSubview:view];
view.layer.borderWidth = 1.0 //Testing: Box the view so you can see it.
viewIndex++;
[self performSelector: @selector(addViews) withObject: nil afterDelay: 1];
}
}
@end


此代码使用实例变量来跟踪它所添加的 View 的索引。它添加一个 View ,然后在调用performSelector:withObject:afterDelay:后返回。此方法在延迟后安排主线程上的 future 调用。这就是您想要处理的方式。

请注意,由于此代码,您可能不会看到任何内容,除非您使要添加的 View 在 View 中显示某些内容。这就是为什么我添加了行 view.layer.borderWidth = 1.0

关于ios - 添加到 subview 的项目不会增量显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766527/

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