我坚持这个奇怪的,但希望简单的问题,并希望得到一些帮助!
我已将资产目录中的图像切成这样:
然后我把这个图像作为xib中的UIImageView的背景:
此xib称为“tagElement”,并作为UIScrollView视图控制器的子视图加载:
tagElement_View * tagElement = [[tagElement_View alloc] initWithFrame:CGRectZero Delegate:self Tag:tag andIndex:tagArray.count - 1];
[scrollView addSubview:tagElement];
然后,当视图最终加载时,它看起来像是一瞬间:
但是,这就是观点在一会儿之后解决的问题:
是否有人知道什么会导致图像调整大小仅在片刻之后发生?
谢谢!
更新:
好的,经过几个小时的调试后,我找到了一个解决方案。我需要将UI更新代码提交到完成块中的主线程,如下所示:
dispatch_async(dispatch_get_main_queue(), ^(void){
// UI Updating Code
});
虽然它正在工作,但我不确定为什么我需要调用它..我从未开始执行后台工作的另一个线程,看起来我只是把这个任务放在主线程上。但这不就是任务本来会被执行的线程吗?
答案 0 :(得分:1)
在这种情况下调用dispatch_async(dispatch_get_main_queue())
所做的是要求等待运行循环的一次旋转。当所有绘图,布局和动画发生时,这将使您超过当前事务的提交。这反过来又可以防止你的代码踩到它自己的脚步。它是一种标准技术,在像iOS这样的系统中非常有用,在事务提交之前不会进行绘图。在你的情况下,它改善了绘图;在许多情况下,它甚至可以防止崩溃(例如:https://stackoverflow.com/a/13907375/341994)。