添加子视图后 setNeedsDisplay 不起作用
Posted
技术标签:
【中文标题】添加子视图后 setNeedsDisplay 不起作用【英文标题】:setNeedsDisplay not working after adding subviews 【发布时间】:2014-11-01 11:19:36 【问题描述】:我在 viewController.view 中添加了大约 500 个视图。 这个动作在目标上花费了大约 5 秒。 现在我希望在添加每个子视图后刷新屏幕,这样用户就会看到它们一一出现在屏幕上。
我在我的 viewController 中试过这个:
-(void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
for(int i=0; i<500; i++)
//...Create aView
[self.view addsubview:aView];
[self.view setNeedsDisplay];
我运行它,5 秒钟内什么也没发生,然后所有视图立即出现。 我确保从主线程上下文中调用了 [self.view setNeedsDisplay]。
知道如何让这些子视图一一出现吗?
【问题讨论】:
您应该阅读setNeedsDisplay
的文档。它不会强制重绘,也不应该。
根据您想要实现的视觉效果,计时器、运行循环和动画是其他值得研究的好主题。
【参考方案1】:
我找到了一个简单的解决方案。我向我的 viewController 添加了一个新属性 - 'subviewsCount' 女巫被初始化为 500。然后从 viewDidLoad 调用以下方法:
-(void) addSubviewsToMotherView
self.subviewsCount -=1;
if (self.subviewsCount >= 0)
[UIView animateWithDuration:0.0
delay:0.0
options:UIViewAnimationOptionLayoutSubviews
animations:^
[self methodToAddSubview];
completion:^(BOOL finished)
[self addSubviewsToMotherView];
];
【讨论】:
以上是关于添加子视图后 setNeedsDisplay 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 子视图和 setNeedsDisplay
setNeedsDisplay 未按预期在子视图中触发 drawRect