iOS开发系列之运动事件

来源:互联网 发布:淘宝账号忘了怎么找回 编辑:程序博客网 时间:2024/05/19 17:49

iOS开发系列之运动事件


前面我们主要介绍了触摸事件以及由触摸事件引出的手势识别,下面我们简单介绍一下运动事件。在iOS中和运动相关的有三个事件:开始运动、结束运动、取消运动。

监听运动事件对于UI控件有个前提就是监听对象必须是第一响应者(对于UIViewController视图控制器和UIAPPlication没有此要求)。这也就意味着如果监听的是一个UI控件那么-(BOOL)canBecomeFirstResponder;方法必须返回YES。同时控件显示时(在-(void)viewWillAppear:(BOOL)animated;事件中)调用视图控制器的becomeFirstResponder方法。当视图不再显示时(在-(void)viewDidDisappear:(BOOL)animated;事件中)注销第一响应者身份。

由于视图控制器默认就可以调用运动开始、运动结束事件在此不再举例。现在不妨假设我们现在在开发一个摇一摇找人的功能,这里我们就自定义一个图片展示控件,在这个图片控件中我们可以通过摇晃随机切换界面图片。代码比较简单:

KCImageView.m

//

//  KCImageView.m

//  TouchEventAndGesture

//

//  Created by Kenshin Cui on 14-3-16.

//  Copyright (c) 2014年 Kenshin Cui. All rights reserved.

//


#import "KCImageView.h"

#define kImageCount 3


@implementation KCImageView


- (instancetype)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];

    if (self) {

        self.image=[self getImage];

    }

    return self;

}


#pragma mark 设置控件可以成为第一响应者

-(BOOL)canBecomeFirstResponder{

    return YES;

}


#pragma mark 运动开始

-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{

    //这里只处理摇晃事件

    if (motion==UIEventSubtypeMotionShake) {

        self.image=[self getImage];

    }

}

#pragma mark 运动结束

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{


}



#pragma mark 随机取得图片

-(UIImage *)getImage{

    int index= arc4random()%kImageCount;

    NSString *imageName=[NSString stringWithFormat:@"avatar%i.png",index];

    UIImage *image=[UIImage imageNamed:imageName];

    return image;

}

@end

KCShakeViewController.m

//

//  KCShakeViewController.m

//  TouchEventAndGesture

//

//  Created by Kenshin Cui on 14-3-16.

//  Copyright (c) 2014年 Kenshin Cui. All rights reserved.

//


#import "KCShakeViewController.h"

#import "KCImageView.h"


@interface KCShakeViewController (){

    KCImageView *_imageView;

}


@end


@implementation KCShakeViewController


- (void)viewDidLoad {

    [super viewDidLoad];



}


#pragma mark 视图显示时让控件变成第一响应者

-(void)viewDidAppear:(BOOL)animated{

    _imageView=[[KCImageView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];

    _imageView.userInteractionEnabled=true;

    [self.view addSubview:_imageView];

    [_imageView becomeFirstResponder];

}


#pragma mark 视图不显示时注销控件第一响应者的身份

-(void)viewDidDisappear:(BOOL)animated{

    [_imageView resignFirstResponder];

}


/*视图控制器的运动事件*/

//-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{

//    NSLog(@"motion begin...");

//}

//

//-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{

//    NSLog(@"motion end.");

//}


@end

运行效果(下图演示时使用了模拟器摇晃操作的快捷键,没有使用鼠标操作):


来自:http://www.cnblogs.com/kenshincui/p/3950646.html

0 0
原创粉丝点击