0

ビューコントローラーに呼び出される 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たが、何も起こりません。私は何を間違っていますか?

4

1 に答える 1

0

解決策:transformプロパティではなく、単独で使用する必要がありました。仕事終わり!

于 2013-04-29T10:17:00.720 に答える