事件传递、事件响应、UIResponder学习

事件传递、事件响应

学习事件传递、事件响应极力推荐:http://www.jianshu.com/p/2e074db792ba (写的真心很棒,本来还打算自己写一个博客呢,但是发现自己无论如何也达不到那种程度,所以仅仅是把链接贴出来,一方面是为了关注我的朋友能去了解一下,另一方面也是为了给自己学习过程留下一个痕迹)

UIResponder学习

转载(http://blog.csdn.net/maojudong/article/details/7798138

简介

此类继承自NSObject所属的框架UIKit.framework定义了一些接口对象,然后响应事件,它是 UIApplication, UIView 和UIWindow等的父类
iOS 中,所有显示在界面上的对象都是从 UIResponder 直接或间接继承的。
最新版本的iOS中有三种类型事件:

  • 触摸事件(通过触摸、手势进行触发(例如手指点击、缩放))
  • motion事件(通过加速器进行触发(例如手机晃动))
  • 远程控制(通过其他远程设备触发(例如耳机控制按钮))
    下图是苹果官方对于这三种事件的形象描述:


    20140902191747111.png
触摸事件

只要手指触摸屏幕,滑动,从屏幕离开,系统都会产生UIEvent对象类型的事件---当然包括UITouch事件
– touchesBegan:withEvent: 当用户触摸到屏幕时调用方法
– touchesMoved:withEvent: 当用户触摸到屏幕并移动时调用此方法
– touchesEnded:withEvent: 当触摸离开屏幕时调用此方法
– touchesCancelled:withEvent: 当触摸被取消时调用此方法(例如正在触摸过程中,接到了一个电话,则会调用该方法)

motion事件

iOS 3.0 + 开始支持motion事件,特别是摇动设备
– motionBegan:withEvent: 运动开始时执行
– motionEnded:withEvent: 运动结束时执行
– motionCancelled:withEvent: 运动被取消时执行

远程控制(remote control)

iOS 4.0 + 开始支持远程事件
– remoteControlReceivedWithEvent:

比较常用的响应链函数

2.会用到的有一些“响应链”函数
– nextResponder下一个响应者(父控件)
– isFirstResponder是否是第一响应者
– canBecomeFirstResponder能够成为第一响应者
– becomeFirstResponder变成第一响应者
– canResignFirstResponder可以失去第一响应者
– resignFirstResponder失去第一响应者

输入试图相关

输入视图是指当对象为 firstResponder 对象时,需要借助另外一个视图用来处理当前对象的信息输入,如 UITextView 和 UITextField 两个对象,在 UITextField 成为 firstResponder 对象时,会显示一个系统键盘,用来输入信息。这个键盘视图就是一个输入视图了。一共有两个相关的输入视图,一个是 inputView, 另一个是 inputAccessoryView,这两个视图显示的关系如下图:

b.jpg

从图中可以看到, 如果 inputView 和 inputAccessoryView 两个属性都指定了相应的视图,则 inputAccessoryView 对象显示在 inputView 对象的上面。

  • reloadInputViews这个方法是当view是第一响应者的时候,可以更新inputView和inputAccessoryView,官方给的解释是:You can use this method to refresh the custom input view or input accessory view associated with the current object when it is the first responder. The views are replaced immediately—that is, without animating them into place. If the current object is not the first responder, this method has no effect.
    当是第一响应者的时候,通过这个方法,可以去替换inputView和inputAccessoryView,如果不是第一响应者的时候,调用该方法没有效果。
    以下是两个从网上获取的两个小例子:
摇一摇播放音效
  #import “ViewController.h”
  @interface ViewController () {
      BOOL acceptNextShake;
  }

  @end
  @implementation ViewController

  // 封装一个播放段音频的方法

  -(void)playSoundEffect:(NSString )name withCallback:(void ()(SystemSoundID, void )) callback {
  NSString audioFile = [[NSBundle mainBundle] pathForResource:name ofType:nil];
  NSURL *fileUrl = [NSURL fileURLWithPath:audioFile];

  SystemSoundID soundID;
  // 在系统中创建一个音效对象并获得其唯一ID
  AudioServicesCreateSystemSoundID((__bridge CFURLRef)(fileUrl), &soundID);
  // 注册在播放完之后执行的回调函数
  // 第二个和第三个参数跟循环播放有关
  // 第五个参数是指向传给回调函数的数据的指针
  AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, callback, NULL);
  // 播放音效
  AudioServicesPlaySystemSound(soundID);
  // 播放音效并震动
  // AudioServicesPlayAlertSound(soundID);
  }

  // 摇一摇开始播放金币掉下的短音频

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

   acceptNextShake = NO;
  [self playSoundEffect:@"4679.mp3" withCallback:nil];
  // 阻止播放音效文件5秒钟
  dispatch_async(dispatch_get_global_queue(0, 0), ^{
       sleep(5);
       acceptNextShake = YES;
      });
    }
  }  

  -(void)viewDidLoad {
        [super viewDidLoad];

        acceptNextShake = YES;
   }
  @end 
耳机远程事件参考链接:

http://www.it165.net/pro/html/201409/21350.html (iOS开发系列触摸事件、手势识别、摇晃事件、耳机线控)

特别推荐博客:

欢迎关注我的个人微信公众号,免费送计算机各种最新视频资源!你想象不到的精彩!


0.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,738评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,377评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,774评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,032评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,015评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,239评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,724评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,374评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,410评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,457评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,132评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,733评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,804评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,022评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,515评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,116评论 2 341

推荐阅读更多精彩内容