UIView KVO:为什么不改变"中心"导致"框架"的KVO通知?

Ben*_*tto 3 key-value-observing uiview ios

我正在努力加深对这些机制的理解.我有一个启用触摸的UIView,可以更新自己的center属性.

我的理解是,frame属性是的合成功能centerbounds.假设这是真的,我把观察者放在我的可触摸/可移动视图上,观察其frame属性.但是,观察者从未收到有关帧更改的通知(更改时会自动center发生).如果我center直接观察,它按预期工作.

为什么不在frame这里观察工作?


请注意,我知道我可以center直接观察,这很好.我也可以使用will/did方法将更改包围到中心frame,然后也可以使用:

[self willChangeValueForKey:@"frame"];
[self setCenter:center];
[self didChangeValueForKey:@"frame"];
Run Code Online (Sandbox Code Playgroud)

但我主要想了解为什么它不像我期望的那样开箱即用,以防我在这里概念性地遗漏某些东西,无论是关于KVO还是关于视图几何.

谢谢.

小智 10

观察frame不起作用的主要原因是因为没有UIKit属性被定义为符合KVO,除非明确记录为符合KVO.

你没有遗漏任何东西 - 不幸的是,UIKit不支持你试图用观察做的事情.