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
- iOS开发系列之运动事件
- ios开发系列之触摸事件
- iOS开发系列之远程控制事件
- iOS开发系列之触摸事件
- iOS运动事件学习
- iOS中的运动事件
- IOS 应用运动事件分析
- ios开发系列之通知
- ios开发系列之UITableView
- ios开发系列之NSRange
- IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】
- IOS开发UI系列之事件、触摸、手势和响应者链
- iOS开发系列之iOS SDK实例教程
- 无障碍开发系列之事件统一
- 【Android开发学习笔记】【第十课】运动事件 之——触摸屏
- IOS开发之──事件响应
- IOS开发之──事件响应
- iOS开发之UIAlertview的事件处理
- 剑指offer(1)-二维数组中的查找
- Dashgo D1软件支持
- 我有几个粽子,和一个故事
- uiscrollview滚动时候nstimer会失灵
- Linux下用户组、文件权限详解
- iOS开发系列之运动事件
- ionic ng-src 在网页显示,但是导出apk在android手机中运行不显示图片
- 【Android新手笔记四】activity之间的数据共享
- spring aop aspect + annotation实现缓存命中判断
- iOS打电话、发短信、发邮件功能
- 数据库常见错误分析
- Unique Binary Search Trees
- Android跨进程通信二——AIDL
- SLF4J(Simple logging facade for Java)【整理】