iPhone 判断手机晃动

本文介绍了一种在iOS设备上实现摇晃检测的方法。通过UIAccelerometer监测加速度变化,并设置阈值判断是否为有效摇晃。代码示例中包含了状态保持逻辑,以避免连续触发不必要的事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from stackoverflow

// Ensures the shake is strong enough on at least two axes before declaring it a shake.
// "Strong enough" means "greater than a client-supplied threshold" in G's.
static BOOL L0AccelerationIsShaking(UIAcceleration* last, UIAcceleration* current, double threshold) {
       
double
                deltaX
= fabs(last.x - current.x),
                deltaY
= fabs(last.y - current.y),
                deltaZ
= fabs(last.z - current.z);

       
return
               
(deltaX > threshold && deltaY > threshold) ||
               
(deltaX > threshold && deltaZ > threshold) ||
               
(deltaY > threshold && deltaZ > threshold);
}

@interface L0AppDelegate : NSObject <UIApplicationDelegate> {
        BOOL histeresisExcited
;
       
UIAcceleration* lastAcceleration;
}

@property(retain) UIAcceleration* lastAcceleration;

@end

@implementation L0AppDelegate

- (void)applicationDidFinishLaunching:(UIApplication *)application {
       
[UIAccelerometer sharedAccelerometer].delegate = self;
}

- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

       
if (self.lastAcceleration) {
               
if (!histeresisExcited && L0AccelerationIsShaking(self.lastAcceleration, acceleration, 0.7)) {
                        histeresisExcited
= YES;

                       
/* SHAKE DETECTED. DO HERE WHAT YOU WANT. */

               
} else if (histeresisExcited && !L0AccelerationIsShaking(self.lastAcceleration, acceleration, 0.2)) {
                        histeresisExcited
= NO;
               
}
       
}

       
self.lastAcceleration = acceleration;
}

// and proper @synthesize and -dealloc boilerplate code

@end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值