我无法弄清楚。

我有一个观点。

这是一个速度计。

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

- (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属性。

指针负责每帧的定位-设置自己的显示链接处理程序并在此层上执行转换

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

我无法理解这种行为。

我可以理解SUPERview中的某些更改,导致此方法受到打击。
 但是SUBlayer如何强制呢?

当然,子层应该受其父级摆布吗?

我尝试设置

self.autoresizesSubviews = NO;


这显然没有任何作用

我要寻找的财产是

self.getsAutoresizedBySubviewsOrLayers = NO;


到底是怎么回事?

最佳答案

添加一个子视图将导致在该子视图,它的目标以及该目标的所有子视图上调用layoutSubviews

您可以在问题When is layoutSubviews called?中找到更多信息

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

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

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


通常,最好不要在init方法中引用“ self.”。

关于ios - iOS:添加了图层(在CADisplayLink上更新)以查看触发器[view layoutSubviews] 60x/sec —为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6812739/

10-09 16:30