2013-08-30 56 views
1

我有一个MorphView.h文件,它跟踪MorphView对象上手指的位置。iOS中的值观察

#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

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]; 

的init和也做了观测所需的功能。

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

但是,我没有看到“成功观察”正在打印。我做错了吗?我想要的只是从我的主视图控制器跟踪我的morphX值。

谢谢!

回答

1

您添加了关键路径morphX的观察者,而不是MorphView.morphX。改变观察者以与正确的路径进行比较。

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

如果要确保这是从一个特定的对象来比较,然后对一些实例变量保持到对象的引用object参数。

此外,您传递错误的观察者到addObserver...。它应该是:

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

观察员必须实现该observeValueForKeyPath:...方法的类。

+0

嗨,对不起,我真的开始与morphX那里,并改变它,因为它不工作。当MorphView.morphX更改为morphX时仍然不起作用。编辑。 – lppier

+0

查看我的更新。你设置了错误的观察者。 – rmaddy

+0

嗯,它仍然无法正常工作。我需要在MorphView中专门做什么吗?目前我只是在做_morphX = location.x;在touchesBegan – lppier

相关问题