博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发系列之运动事件
阅读量:6803 次
发布时间:2019-06-26

本文共 2449 字,大约阅读时间需要 8 分钟。

前面我们主要介绍了触摸事件以及由触摸事件引出的手势识别,下面我们简单介绍一下运动事件。在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://xrjwl.baihongyu.com/

你可能感兴趣的文章
you may safely reboot your system
查看>>
SCP报错
查看>>
mysql(六)
查看>>
安保方案
查看>>
linux 日期时间计算
查看>>
华为93系统交换机配置跨×××路由和跨×××策略路由
查看>>
无限极分类,把子集数组压到父集数组的一个子项下面,用于在前台模板更好的循环显示...
查看>>
Axis --SOAP引擎
查看>>
解决XenDesktop启动后无法加载picagina.dll文件
查看>>
linux进程管理、任务管理
查看>>
VMware出现的问题(网络)
查看>>
大话数据库编程规范
查看>>
我的友情链接
查看>>
自己收集的golang书籍
查看>>
RCP 文件路径问题
查看>>
View 4.6连接异常 求助~~~~~!
查看>>
python网络编程socketserver模块(实现TCP客户端/服务器)
查看>>
[python] 线程简介
查看>>
pure响应式布局
查看>>
homework-09
查看>>