jerky motion using CMMotionManager iPhone
I am using CMMotionManager to move buttons, images etc. on my view as the
device is tipped forward, backward, right, left. I get the attitude pitch
and roll and then use these to assign values to a string representing
pixel placement on the screen.
Here is how I get the info
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 0.05f;
[motionManager
startDeviceMotionUpdatesToQueue:[NSOperationQueue
currentQueue] withHandler:^(CMDeviceMotion *motion,
NSError *error) {
NSNumberFormatter *formatter = [[NSNumberFormatter
alloc] init];
[formatter
setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
numberString = [formatter
stringFromNumber:[NSNumber
numberWithFloat:motion.attitude.roll /8]];
numberString1 = [formatter
stringFromNumber:[NSNumber
numberWithFloat:motion.attitude.pitch /8]];
}];
and this is how I assign them.
NSString *deltax = numberString;
NSString *deltay = numberString1;
NSLog(@"xString;%@",numberString);
if ([deltax isEqualToString:@"-0.01"]) {
xString = @"160";}
else if ([deltax isEqualToString:@"-0.02"]) {
xString = @"161";}
else if ([deltax isEqualToString:@"-0.03"]) {
xString = @"162";}
else if ([deltax isEqualToString:@"-0.04"]) {
xString = @"163";}
etc.
I have made them so the x axis continuously goes up and down (back and
forth) on the screen. i.e. -.01 is the same as -.40, .01 and .40. and they
are approached the same as you go up from -.01 and .01the values get
bigger and from -.40 and 4.4 they get smaller. I did the same with y axis
also. -.01 and .01 are 284 and -.20 and .20 are at 264. However in this
case the numbers go up from -.01 and down from .01.
here are some examples
//x axis
if ([deltax isEqualToString:@"-0.01"]) {
xString = @"160";}
else if ([deltax isEqualToString:@"-0.02"]) {
xString = @"161";}
else if ([deltax isEqualToString:@"-0.03"]) {
xString = @"162";}
else if ([deltax isEqualToString:@"-0.04"]) {
xString = @"163";}
else if ([deltax isEqualToString:@"-0.37"]) {
xString = @"156";}
else if ([deltax isEqualToString:@"-0.38"]) {
xString = @"157";}
else if ([deltax isEqualToString:@"-0.39"]) {
xString = @"158";}
else if ([deltax isEqualToString:@"-0.4"]) {
xString = @"159";}
else if ([deltax isEqualToString:@"0.01"]) {
xString = @"159";}
else if ([deltax isEqualToString:@"0.02"]) {
xString = @"158";}
else if ([deltax isEqualToString:@"0.03"]) {
xString = @"157"; }
else if ([deltax isEqualToString:@"0.04"]) {
xString = @"156";}
else if ([deltax isEqualToString:@"0.37"]) {
xString = @"163";}
else if ([deltax isEqualToString:@"0.38"]) {
xString = @"162";}
else if ([deltax isEqualToString:@"0.39"]) {
xString = @"161";}
else if ([deltax isEqualToString:@"0.4"]) {
xString = @"160";}
//y axis
if ([deltay isEqualToString:@"-0.01"]) {
yString = @"284";}
else if ([deltay isEqualToString:@"-0.02"]) {
yString = @"285";}
else if ([deltay isEqualToString:@"-0.03"]) {
yString = @"286";}
else if ([deltay isEqualToString:@"-0.04"]) {
yString = @"287";}
else if ([deltay isEqualToString:@"-0.17"]) {
yString = @"300"; }
else if ([deltay isEqualToString:@"-0.18"]) {
yString = @"301";}
else if ([deltay isEqualToString:@"-0.19"]) {
yString = @"302";}
else if ([deltay isEqualToString:@"-0.2"]) {
yString = @"303";}
else if ([deltay isEqualToString:@"0.01"]) {
yString = @"283";}
else if ([deltay isEqualToString:@"0.02"]) {
yString = @"282";}
else if ([deltay isEqualToString:@"0.03"]) {
yString = @"281";}
else if ([deltay isEqualToString:@"0.04"]) {
yString = @"280"; }
else if ([deltay isEqualToString:@"0.17"]) {
yString = @"267";}
else if ([deltay isEqualToString:@"0.18"]) {
yString = @"266";}
else if ([deltay isEqualToString:@"0.19"]) {
yString = @"265";}
else if ([deltay isEqualToString:@"0.2"]) {
yString = @"264";}
In this way there is continuous flow from one orientation to the next.
However I am having a small problem. when the phone is tipped forward and
passes from .2 faceUp orientation to .2 faceDown orientation. I get a
jerky motion. In faceUp .2 buttons etc. move to the left all of a sudden
and when it moves to faceDown .20 they move to the right. Otherwise the
buttons etc. are centered at .19 and -.19 and return there to operate
normally (as expected). I have tried to call DeviceOrientationFaceUp and
FaceDown but this didn't seem to help.
Does anyone have any experience with this behavior and know of a fix or
have any suggestions.
No comments:
Post a Comment