0

我无法弄清楚这一点。

我有一个看法。

它是一个速度计。

我在车速表里放了一根针:

- (id) initWithFrame: (CGRect) frame
{    
    self = [super initWithFrame: frame]; // [super initWithCoder: coder];
    if (! self)
        return nil;

    :
    :
    : 
    self.needle = [ [ [Needle alloc] initWithMaxRadius: 0.5*300

    [self.layer addSublayer: needle.layer];

    self.needle.layer.position = CGPointMake( frame.size.width / 2, frame.size.height / 2 );

    return self;
}

针对象包含一个 CALayer 属性。

needle 负责为每一帧定位自己——它设置自己的显示链接处理程序并在该层上执行转换

现在突然我的视图的 layoutSubviews 方法每一帧都被击中。

我无法理解这种行为。

我可以理解 SUPERview 中的一些变化导致这种方法受到影响。但是 SUBlayer 如何强制执行此操作?

一个子层肯定应该受其父层的摆布吗?

我试过设置

self.autoresizesSubviews = NO;

这显然没有效果

我要找的房产是

self.getsAutoresizedBySubviewsOrLayers = NO;

到底是怎么回事?

4

1 回答 1

1

添加子视图将导致layoutSubviews在子视图、它的目标以及目标的所有子视图上被调用。

您可以在何时调用 layoutSubviews问题中找到更多信息?

顺便说一句,您可能在上面的代码中有一些内存泄漏。

如果needle是保留属性,则此行将导致过度保留:

self.needle = [ [ [Needle alloc] initWithMaxRadius: 0.5*300

一般来说,最好不要self.在 init 方法中引用“”。

于 2011-10-03T14:17:25.420 回答