0
我一直试图去加速度计移动UIImageView,但我遇到了问题。当我尝试平滑数据并计算出原始位置的数据加速度时,这些值将返回无穷大。我不确定我做错了什么!加速度计计算导致inf
这里是我的代码:
- (void)viewDidLoad {
gameObjects = [NSMutableArray arrayWithObjects: nil];
UIImageView* mainChar = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[mainChar setCenter:CGPointMake(screenHeight/2, screenWidth/2)];
mainChar.image = [UIImage imageNamed:@"dot.png"];
[self.view insertSubview:mainChar atIndex:2];
[gameObjects addObject:mainChar];
mainChar = nil;
AvData = [NSMutableArray arrayWithObjects: nil];
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 20;
[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData* accelerationData, NSError* error) {
if (defaultData == nil) {defaultData = accelerationData;}
[self accelerometerUpdate:accelerationData];
}];
}
-(void) accelerometerUpdate:(CMAccelerometerData*)aData {
//Accelerometer Smoothing
[AvData addObject:aData];
if ([AvData count] >= 20) {[AvData removeObjectAtIndex:0];}
float avX = 0;
float avY = 0;
float avZ = 0;
for (int i = 0; i < [AvData count]; i++) {
avX = avX + [[AvData objectAtIndex:i] acceleration].x;
avY = avY + [[AvData objectAtIndex:i] acceleration].y;
avZ = avZ + [[AvData objectAtIndex:i] acceleration].z;
}
avX = avX/([AvData count] - 1);
avY = avY/([AvData count] - 1);
avZ = avZ/([AvData count] - 1);
//Calculate the delta from original device acceleration value
float accX = defaultData.acceleration.x - avX;
float accY = defaultData.acceleration.y - avY;
//float accZ = defaultData.acceleration.z - avZ;
NSLog([NSString stringWithFormat:@"%f", accY]);
UIImageView* mainChar = [gameObjects objectAtIndex:0];
[mainChar setCenter:CGPointMake(mainChar.center.x + accX, mainChar.center.y + accY)];
//accX and accY are infinity for some reason, and so the image disappears!
mainChar = nil;
}
奇怪的是,当我的NSLog ACCY,它返回一个适当的值。我究竟做错了什么?
好的,谢谢!现在工作正常。在我的脑海里,计数包括最后的零! – Hamish
调用addObject的nil只是一个参数结束标记,用于需要可变数量参数的方法中。这是C语言可变参数机制的延续。我更喜欢新的对象文字语法:NSArray * anArray = @ [@(1),@(2),@(3)]; –