0

我有一个自定义 UIImageView 类,我想用它来控制我的 UIImageViews。

在自定义初始化方法中,我有以下关于 UIAccelerometer 的内容:

    UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
    accelerometer.updateInterval = 0.5f;
    accelerometer.delegate = self;

我的问题是我有这个类的多个实例,加速度计只将信息发送到我创建的最后一个实例。我知道这样做的原因是因为委托被设置为最后一个实例,所以我的问题是:

有没有办法将委托设置为所有这些实例,以便它们都收到“didAccelerate”调用?如果是这样,那么我将如何去做。

4

1 回答 1

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
}
于 2012-07-30T11:51:42.873 回答