如何确保UIView重新显示

时间:2013-09-30 17:08:38

标签: ios objective-c animation uiview uiimageview

我有一个带有UIView层次结构的应用程序,看起来像这样:

mainView (is always rotated appropriately for the user)
    topView1
        thumbnail1.1
        thumbnail1.2
        thumbnail1.3
    topView2
        thumbnail2.1
        thumbnail2.2
        thumbnail2.3
    topView3
        thumbnail3.1
        thumbnail3.2
        thumbnail3.3

有任意数量的topViews(UIView子类),每个都有任意数量的缩略图,每个缩略图都是UIImageView子类。使用应用程序的功能,可以将一个或多个topView移出屏幕。发生这种情况时,缩略图的图像属性将被填空。如果将topView移回屏幕,则会恢复图像属性。

问题是图像没有按预期显示。那我该怎么做呢?

在循环中,我使用GCD在后台线程中设置image属性。设置图像属性后,我调用[thumbnail setNeedsDisplay]。这是我期望使恢复的图像可见,并且事实上,其中一些确实出现,但有些没有。我遇到了GCD问题吗?

该应用程序的另一个功能是重新排列topView上的所有缩略图(它只是重新排列其位置)。如果我调用该函数,则所有图像都可见。

也许很重要,但我不这么认为,当topView进入视图时,它是通过动画完成的。我不认为这很重要,因为为这样的动画设置的值(使用UIView动画方法完成)会立即生效,即使动画需要一段时间。

我是否可能必须在完成块中调用setNeedsDisplay?

2 个答案:

答案 0 :(得分:1)

您应该只调用setNeedsDisplay并从主线程设置图像。所有UI更改都必须在主线程上完成。

答案 1 :(得分:0)

setNeedsDisplay方法应该确保:

[view setNeedsDisplay];