我有一个自定义的UIImageView类,我想用它来控制我的UIImageViews。
在自定义init方法中,我对UIAccelerometer有以下几点:
UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.updateInterval = 0.5f;
accelerometer.delegate = self;
我的问题是我有这个类的多个实例,而加速度计只向我创建的最后一个实例发送信息。我知道这是因为委托被设置为最后一个实例,所以我的问题是:
有没有办法将委托设置为所有这些实例,以便所有这些实例都接收“didAccelerate”调用?如果是这样,那我该怎么做呢。
答案 0 :(得分:1)
免责声明:您尝试使用的方法已弃用。请改用CMMotionManager
。但是:
设置一个委托(它应该是一个单独的类),然后使用NSNotificationCenter将信息分发给其他侦听器。例如:
@interface SharedAccelerometerListener: NSObject <UIAccelerometerDelegate>
@end
@implementation SharedAccelerometerListener
- (id)init
{
if ((self = [super init]))
{
[UIAccelerometer sharedAccelerometer].delegate = self;
[UIAccelerometer sharedAccelerometer].updateInterval = 0.05f;
}
}
- (void)accelerometer:(UIAccelerometer *)acc didAccelerate:(UIAcceleration *)acceleration
{
NSDictionary *info = [NSDictionary dictionaryWithObject:acceleration forKey:@"acceleration"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"AccelerometerDidAccelerate" sender:nil userInfo:info];
}
@end
然后在你的听众课上:
id accelerationListener = [[SharedAccelerometerListener alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didAccelerate:) name:@"AccelerometerDidAccelerate" object:nil];
- (void)didAccelerate:(NSNotification *)notif
{
UIAcceleration *acc = [[notif userInfo] objectForKey:@"acceleration"];
// do whatever you want with the acceleration
}