【发布时间】:2026-01-16 04:15:02
【问题描述】:
我正在使用观察者跟随代码
myView = [[UIView alloc] initWithFrame:CGRectZero];
[myView addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
另一个代码
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"observeValueForKeyPath");
if([keyPath isEqualToString:@"frame"])
{
[self layoutViews];
}
}
但我从来没有得到日志 observeValueForKeyPath
【问题讨论】:
-
有趣的问题,我不知道答案,但就您要完成的工作而言,有更有效的方法。您应该使用 setNeedsLayout 并让渲染系统在下一轮运行循环中为您完成脏活。
-
我现在尝试了你的代码,observeValueForKeyPath 被正确调用。您确定 myView 没有在某处发布吗?你是如何更新框架的?代码,在方向改变时自动调整大小等?
-
是的 .. 实际上我有两个完全原生的代码示例,可以正常工作.. 另一个是作为 phonegap 插件,它不工作github.com/gdavis/FGallery-iPhone/issues/6
标签: iphone uiview addobserver