我正在尝试复制类似于Runtastic's Fitness Apps的健身应用。
仰卧起坐
这是我们的第一个使用手机内置加速计检测运动的应用程序。您需要将手机放在胸前,然后足够快地坐起来,让加速度计记录运动,并将应用程序计为1个仰卧起坐。一定要做足够的仰卧起坐!
我做了一个类似于这个问题here的原型应用,试图实现一种计算仰卧起坐的方法。
- (void)viewDidLoad {
[super viewDidLoad];
int count = 0;
motionManager = [[CMMotionManager alloc]init];
if (motionManager.deviceMotionAvailable)
{
motionManager.deviceMotionUpdateInterval = 0.1;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
// Get the attitude of the device
CMAttitude *attitude = motion.attitude;
// Get the pitch (in radians) and convert to degrees.
double degree = attitude.pitch * 180.0/M_PI;
NSLog(@"%f", degree);
dispatch_async(dispatch_get_main_queue(), ^{
// Update some UI
if (degree >=75.0)
{
//it keeps counting if the condition is true!
count++;
self.lblCount.text = [NSString stringWithFormat:@"%i", count];
}
});
}];
NSLog(@"Device motion started");
}
else
{
NSLog(@"Device motion unavailable");
}
}
if条件语句有效,好像我把设备放在胸前并做一个正确的仰卧起坐,但是这个if语句的问题是它只会继续计数,我希望它只计算在设备已经回到原来的位置。
任何人都可以为此提出逻辑实现吗?
答案 0 :(得分:0)
一个简单的布尔标志就是这个诀窍:
__block BOOL situp = NO;
if (!situp)
{
if (degree >=75.0)
{
count++;
self.lblCount.text = [NSString stringWithFormat:@"%i", count];
situp = YES;
}
}
else
{
if (degree <=10.0)
{
situp = NO;
}
}
这里不是最好的逻辑实现,但它完成了工作......