使用资产目录进行iOS图像切片会创建奇怪的工件

时间:2014-09-26 01:14:02

标签: ios objective-c xcode image

我坚持这个奇怪的,但希望简单的问题,并希望得到一些帮助!

我已将资产目录中的图像切成这样:

enter image description here

然后我把这个图像作为xib中的UIImageView的背景:

enter image description here

此xib称为“tagElement”,并作为UIScrollView视图控制器的子视图加载:

tagElement_View * tagElement = [[tagElement_View alloc] initWithFrame:CGRectZero Delegate:self Tag:tag andIndex:tagArray.count - 1];
[scrollView addSubview:tagElement];

然后,当视图最终加载时,它看起来像是一瞬间:

enter image description here

但是,这就是观点在一会儿之后解决的问题:

enter image description here

是否有人知道什么会导致图像调整大小仅在片刻之后发生?

谢谢!

更新:

好的,经过几个小时的调试后,我找到了一个解决方案。我需要将UI更新代码提交到完成块中的主线程,如下所示:

dispatch_async(dispatch_get_main_queue(), ^(void){

    //  UI Updating Code

});

虽然它正在工作,但我不确定为什么我需要调用它..我从未开始执行后台工作的另一个线程,看起来我只是把这个任务放在主线程上。但这不就是任务本来会被执行的线程吗?

1 个答案:

答案 0 :(得分:1)

在这种情况下调用dispatch_async(dispatch_get_main_queue())所做的是要求等待运行循环的一次旋转。当所有绘图,布局和动画发生时,这将使您超过当前事务的提交。这反过来又可以防止你的代码踩到它自己的脚步。它是一种标准技术,在像iOS这样的系统中非常有用,在事务提交之前不会进行绘图。在你的情况下,它改善了绘图;在许多情况下,它甚至可以防止崩溃(例如:https://stackoverflow.com/a/13907375/341994)。