gpt4 book ai didi

iOS:添加到 View 触发器的图层(在 CADisplayLink 上更新)[view layoutSubviews] 60x/sec - 为什么?

转载 作者:行者123 更新时间:2023-11-29 05:01:29 27 4
gpt4 key购买 nike

我无法弄清楚这一点。

我有一个观点。

它是一个速度计。

我把一根针插入速度计:

- (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;
}

needle 对象包含一个 CALayer 属性。

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

现在突然我的 View 的layoutSubviews方法每帧都会被命中。

我无法理解这种行为。

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

子层肯定应该受其父层的支配吗?

我尝试设置

self.autoresizesSubviews = NO;

这显然没有效果

我正在寻找的特性是

self.getsAutoresizedBySubviewsOrLayers = NO;

这是怎么回事?

最佳答案

添加 subview 将导致在 subview 、其目标以及目标的所有 subview 上调用 layoutSubviews

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

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

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

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

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com