ios – CALayers永远不会调用它的委托的drawLayer:inContext:甚至在[layer setNeedsDisplay]和[layer display]之后

ios – CALayers永远不会调用它的委托的drawLayer:inContext:甚至在[layer setNeedsDisplay]和[layer display]之后,第1张

概述我无法弄清楚为什么我正在创建的CALayer没有调用他们的drawLayer方法.我为它们创建了一个drawLayer委托对象,但它永远不会被调用.从UIView子类: - (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { UIView *bg = [[ 我无法弄清楚为什么我正在创建的CALayer没有调用他们的drawLayer方法.我为它们创建了一个drawLayer委托对象,但它永远不会被调用.从UIVIEw子类:
- (ID)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {       UIVIEw *bg = [[UIVIEw alloc] initWithFrame:self.bounds];       // I have a property called 'bg' to reference the child UIVIEw       self.bg = bg;       [self addSubvIEw:self.bg];       // an NSObject subclass I use as a CALayer delegate       MyLayerDelegate *drawer = [MyLayerDelegate new];       self.drawer = drawer;       CAGradIEntLayer *layer = [CAGradIEntLayer layer];;       layer.delegate = self.drawer;       layer.name = @"bg";       [self.bg.layer addSublayer:layer];       [layer setNeedsdisplay];       [layer display];    }    return self;}

在self.drawer我有:

- (voID)drawLayer:(CALayer *)layer inContext:(CGContextRef)context{    NSLog(@"layer called drawLayer");    // Some drawing goes here}

我尝试了很多不同的东西.我已经尝试在self.bg.layer上设置setNeedsdisplay,我在self.bg上尝试了setNeedsdisplay,我在addSublayer之前和之后尝试了[layer setNeedsdisplay],我在addSublayer之前和之后尝试了[图层显示].我曾尝试使用和不使用[图层显示]和[图层displayIfNeeded].

为什么图层拒绝绘制?

解决方法 图层框架必须为非零.这解决了这个问题:
layer.frame = self.bg.bounds;[layer setNeedsdisplay];[self.bg.layer addSublayer:layer];
总结

以上是内存溢出为你收集整理的ios – CALayers永远不会调用它的委托的drawLayer:inContext:甚至在[layer setNeedsDisplay]和[layer display]之后全部内容,希望文章能够帮你解决ios – CALayers永远不会调用它的委托的drawLayer:inContext:甚至在[layer setNeedsDisplay]和[layer display]之后所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1105459.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存