Есть ли способ наблюдать изменения в производных свойствах? Например, я хочу знать, когда CALayer был добавлен в качестве подслоя, чтобы я мог настроить его геометрию относительно его (нового) родителя.
Итак, у меня есть подкласс CALayer, скажем CustomLayer, и я решил, что могу зарегистрировать наблюдателя для свойства в init:
[self addObserver:self forKeyPath:@"superlayer" options:0 context:nil]
и внедрить observeValueForKeyPath:ofObject:change:context
. Ничего не происходит, потому что, по-видимому, суперслой является производным свойством (словарь attr хранит непрозрачный идентификатор для родителя). Точно так же я не могу подкласс setSuperlayer:
, потому что он никогда не вызывается. На самом деле, насколько я могу судить, нет никаких вызванных методов экземпляра или открытых свойств на подуровне, когда родитель делает [self addSublayer:aCustomLayer]
.
Тогда я подумал, хорошо, я сделаю подкласс addSublayer следующим образом:
- (void)addSublayer:(CALayer *)aLayer {
[aLayer willChangeValueForKey:@"superlayer"];
[super addSublayer:aLayer];
[aLayer didChangeValueForKey:@"superlayer"];
}
но все равно ничего! (Возможно, это подсказка, что когда я делаю простой автономный тестовый класс и использую will[did]ChangeValueForKey:
, тогда он работает.) Возможно, это более общий вопрос Cocoa KVO. Что мне делать? Заранее спасибо!