【问题标题】:setNeedsDisplay not working after adding subviews添加子视图后 setNeedsDisplay 不起作用
【发布时间】: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 的文档。它不会强制重绘,也不应该。
  • 根据您想要实现的视觉效果,计时器、运行循环和动画是其他值得研究的好主题。

标签: ios objective-c iphone addsubview 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];
                         }
         ];

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多