添加子视图后 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

在当前视图上添加子视图后 UIButton 不起作用

使用 setNeedsDisplay 更新 UIView 不起作用

Swift/iOS 子视图在主线程上未立即显示

setNeedsLayout 和 setNeedsDisplay