【问题标题】:CGGradient not drawing immediatelyCGGradient 没有立即绘制
【发布时间】:2016-05-14 19:05:48
【问题描述】:

我真的不明白发生了什么。我的图像视图上有渐变,我想在没有互联网时将其删除。当互联网回来时,我想再画一次。这听起来可能很奇怪,但是当互联网在线和我的块调用时,它(渐变)仅在 10-15 秒后绘制。这是什么黑魔法?代码如下:

[[Reachability rac_reachabilitySignal] subscribeNext:^(Reachability *reach) {
        NSLog(@"%hhd reachable internet", reach.isReachable);
        NSLog(@"%hhd reachable waflya", reach.isReachableViaWiFi);

        if (reach.isReachable && reach.isReachableViaWiFi){
            NSLog(@"prepare to insert gradient");
            [_vFooter.layer insertSublayer:self.gradient atIndex:0];
            [self.view setNeedsDisplay];
            [self.newsImage setNeedsDisplay];
        }

    }];

细节并不重要,请确保在连接出现后立即执行该块。

这是我做断点时的屏幕:

【问题讨论】:

  • 您必须在主/UI-Thread 上执行所有 UI 操作,目前它们是在一些可能在不同线程中运行的回调中执行的。
  • @luk2302 没错,它解决了问题。谢谢!

标签: ios objective-c


【解决方案1】:

任何 UI 的更新,包括视图/层,都必须在主线程上执行!

dispatch_async(dispatch_get_main_queue(), ^{
    [_vFooter.layer insertSublayer:self.gradient atIndex:0];
    // ...
});

【讨论】:

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