【问题标题】:iOS image slicing with asset catalog creates strange artifacts带有资产目录的 iOS 图像切片会创建奇怪的工件
【发布时间】:2014-09-26 01:14:01
【问题描述】:

我遇到了这个奇怪但希望很简单的问题,希望得到一些帮助!

我已将资产目录中的图像切成如下所示:

然后我将此图像作为 UIImageView 的背景放在 xib 中:

这个 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

});

虽然它可以工作,但我不确定为什么需要调用它。我从未启动另一个线程来执行后台工作,似乎我只是将这个任务放在主线程上。但这不就是任务本来要执行的线程吗?

【问题讨论】:

    标签: ios objective-c xcode image


    【解决方案1】:

    在这种情况下调用dispatch_async(dispatch_get_main_queue()) 所做的是要求等待运行循环的一转。当所有绘图、布局和动画都发生时,这会让你通过当前事务的提交。这反过来又可以防止您的代码自食其力。这是一种标准技术,在像 iOS 这样的系统中非常有用,在这种系统中,直到事务提交才会进行绘制。在您的情况下,它可以改善绘图;在许多情况下,它甚至可以防止发生崩溃(如这里:https://stackoverflow.com/a/13907375/341994)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2020-11-03
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多