iOS 如何测试是否是晃屏

本文介绍了一种在iOS应用中实现摇动侦测的方法,通过使用UIAccelerometer监测设备加速度变化,当用户摇动设备时触发特定事件。文中提供了详细的代码实现,包括如何设置加速度更新间隔、计算摇动次数及阈值判断。

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

APP STORE上的很多软件,如打火机啊蜡烛等效果利用的
加速计  或 Shake 摇动侦测  等 开发思路分享:
摇晃前的预设文字:没事
用力摇晃后画面将显示为:摇动

程序代码:
AccelerometerDemoViewController.h

  
#import <UIKit/UIKit.h>

@interface AccelerometerDemoViewController : UIViewController <UIAccelerometerDelegate>{
        IBOutlet UILabel *mylabel;
}

@property (nonatomic,retain) UILabel *mylabel;

@end

AccelerometerDemoViewController.m


@implementation AccelerometerDemoViewController

@synthesize mylabel;

- (void)viewDidLoad {
        UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
        accelerometer.delegate = self;
        accelerometer.updateInterval =  1.0f/60.0f;
    [super viewDidLoad];        
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
        
        static NSInteger shakeCount=0;
        static NSDate *shakeStart;
        
        NSDate *now=[[NSDate alloc] init];
        //  摇晃 2秒内
        NSDate *checkDate=[[NSDate alloc] initWithTimeInterval:2.0f sinceDate:shakeStart];
        
        //超过2秒  重计算晃动次数
        if ([now compare:checkDate]==NSOrderedDescending||shakeStart==nil){
                shakeCount=0;
                [shakeStart release];
                shakeStart=[[NSDate alloc] init];                                
        }
        
        [now release];
        [checkDate release];
        
        // 三轴摇晃的G力超过2则 列入计次
        if (fabsf(acceleration.x)>2.0 || fabsf(acceleration.y)>2.0|| fabsf(acceleration.z)>2.0){
                shakeCount++;
                
                //2秒内侦测到4次则判定为Shake摇晃手机
                if (shakeCount>4){
                        shakeCount=0;
                        [shakeStart release];
                        shakeStart=[[NSDate alloc] init];
                        
                        //画面显示摇动文字
                        mylabel.text=@"地震了";
                        
        //设定2秒后自动还原                
        [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(cleartext) userInfo:nil repeats:NO];
                }
        }
}                
                        
-(void)cleartext{
        mylabel.text=@"没现象";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值