ビューコントローラーに呼び出される UIView を追加しています。KVObookViewContainer
を使用してそのスケールがいつ変化するかを検出したいと考えています。これが私のものviewDidLoad
です:
- (void)viewDidLoad
{
[super viewDidLoad];
bookViewContainer = [[UIView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:bookViewContainer];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[bookViewContainer addGestureRecognizer:tap];
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchRecognized:)];
[bookViewContainer addGestureRecognizer:pinch];
[bookViewContainer addObserver:self forKeyPath:@"transform.scale" options:NSKeyValueObservingOptionNew context:NULL];
}
そして私のobserveValueForKeyPath
:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@", object);
}
ただし、プロジェクトを実行すると、すぐにエラーが発生します。
クラス NSConcreteValue のインスタンス 0x1d844ca0 の割り当てが解除されましたが、キー値オブザーバーがまだ登録されていました。観測情報が漏洩し、他の天体に誤って付着する可能性さえあります。NSKVODeallocateBreak にブレークポイントを設定して、デバッガーでここで停止します。現在の観測情報は次のとおりです: (コンテキスト: 0x0、プロパティ: 0x1d844db0> )
私は以前に KVO を使用したことがありますが (ただし、使用したことはありませんtransform.scale
)、ビューは確実に割り当て解除されていません (私は ARC を使用しています)。代わりに使用してみましscale
たが、何も起こりません。私は何を間違っていますか?