1

MorphView オブジェクト上の指の位置を追跡する MorphView.h ファイルがあります。

#import <UIKit/UIKit.h>

@interface MorphView : UIButton

@property (nonatomic) float morphX;
@property (nonatomic) float morphY;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event ;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

@end

メイン ビュー コントローラからボタンの morphX を「観察」したい。私は重要な価値の観察を読み、これを行いました。

ViewController.m の init

    MorphView* morphPadBtn = [MorphView buttonWithType:UIButtonTypeCustom];     
    [morphPadBtn addTarget:self action:@selector(morphPressedDown:withEvent:) forControlEvents:UIControlEventTouchDown];
    UIImage *buttonbkImage = [UIImage imageNamed:@"buttonback"];
    [morphPadBtn setBackgroundImage:buttonbkImage forState:UIControlStateNormal];
    [morphPadBtn setAdjustsImageWhenHighlighted:NO];
    morphPadBtn.frame = CGRectMake(300, 200, 300, 300.0);
    [self.view addSubview:morphPadBtn];        
    [morphPadBtn addObserver:morphPadBtn forKeyPath:@"morphX" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

また、観察に必要な機能も果たしました。

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if([keyPath isEqualToString:@"morphX"])
    {
        NSLog(@"Success in observation!"); 
    }
}

しかし、「観測成功」が印刷されているのが見えません。私はこれを間違っていますか?私が望むのは、メイン ビュー コントローラーから morphX 値を追跡することだけです。

ありがとう!

4

1 に答える 1

1

morphXではなく、 のキー パスのオブザーバーを追加しましたMorphView.morphX。オブザーバーを変更して、正しいパスと比較します。

if([keyPath isEqualToString:@"morphX"])

これが特定のオブジェクトからのものであることを確認したい場合は、objectパラメータを、オブジェクトへの参照を維持するインスタンス変数と比較します。

また、間違ったオブザーバーを に渡していますaddObserver...。そのはず:

[morphPadBtn addObserver:self forKeyPath:@"morphX" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

observeValueForKeyPath:...オブザーバーは、メソッドを実装するクラスである必要があります。

于 2013-08-30T03:17:27.550 に答える