转载自  http://blog.csdn.net/samguoyi/article/details/7911499

如果只是想获取屏幕点击事件有一个最简单的办法,就是写一个透明的uibutton覆盖在需要获取点击事件的view上面。

这里用第二种办法:

UIGestureRecognizer有很多继承自它的UIxxxGestureRecognizer:

UILongPressGestureRecognizer

UIPanGestureRecognizer

UIPinchGestureRecognizer

UIRotationGestureRecognizer

UISwipeGestureRecognizer

UITapGestureRecognizer

可以响应很多的点击事件,这里的demo介绍点击事件。

        //
// MainViewController.m
// testapple
//
// Created by kiri on 12-5-8.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
// #import "MainViewController.h" @implementation MainViewController
@synthesize imageview; #pragma mark - View lifecycle // Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView
{
[super loadView];
self.view.tag = ; UITapGestureRecognizer *singleOne = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onviewtabed:)];
singleOne.numberOfTouchesRequired = ;
singleOne.numberOfTapsRequired = ;
singleOne.delegate = self;
[self.view addGestureRecognizer:singleOne]; UILongPressGestureRecognizer *longpress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onlongtabed:)];
longpress.minimumPressDuration = 1.0;///至少按1秒
longpress.numberOfTouchesRequired = ;//只有一个触点
[self.view addGestureRecognizer:longpress];
[longpress release]; UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"button" forState:UIControlStateNormal];
button.frame = CGRectMake(, , , );
[button addTarget:self action:@selector(onbuttonclick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button]; UITapGestureRecognizer *singleTwo = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onviewtabed:)];
singleTwo.numberOfTouchesRequired = ;
singleTwo.numberOfTapsRequired = ;
singleTwo.delegate = self; self.imageview = [[UIImageView alloc] init];
imageview.frame = CGRectMake(, , , );
imageview.image = [UIImage imageNamed:@"test.png"];
imageview.tag = ;
[imageview addGestureRecognizer:singleTwo];
imageview.multipleTouchEnabled = YES;//设置属性使得uiimageview可以响应屏幕事件
imageview.userInteractionEnabled = YES;
[self.view addSubview:imageview]; aaaimg = [UIImage imageNamed:@"aaa.jpg"];
bbbimg = [UIImage imageNamed:@"bbb.jpg"];
imageview.image = aaaimg; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
NSLog(@"gestureRecognizer");
return ([[touch.view class] isSubclassOfClass:[UIButton class]]) ? NO : YES;///当点击按钮时使得原按钮事件去响应,而不是gesture事件
} -(void)onviewtabed:(UITapGestureRecognizer *)sender
{
NSLog(@"view touchs on tag = %d",sender.view.tag);
if(sender.state != UIGestureRecognizerStateEnded && sender.state != UIGestureRecognizerStateFailed)///注意需要判断状态
{
///do things
}
} -(void)onlongtabed:(UILongPressGestureRecognizer *)sender
{
NSLog(@"on long tabed");
} // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
} -(void)opinbackthread
{ } #pragma mark - myfunctions
-(void)onbuttonclick
{
NSLog(@"onbuttonclick"); } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{ return (interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
} -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
NSLog(@"did rotate");
} -(void)dealloc
{
[super dealloc];
} @end

使用UIGestureRecognizer监听屏幕事件的更多相关文章

  1. [Swift通天遁地]三、手势与图表-(1)监听屏幕上触摸事件的各种状态

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. 全局监听SCREEN_ON和SCREEN_OFF的替代方法--监听屏幕解锁事件

    在做一个程序的时候,需要时刻保持某一服务是启动的,因此想到了通过监听屏幕SCREEN_ON和SCREEN_OFF这两个action.奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使 ...

  3. IOS监听屏幕状态

    一.定义两个宏   //锁屏通知 #define NotificationOff CFSTR("com.apple.springboard.lockcomplete")   //解 ...

  4. JS 获取和监听屏幕方向变化(portrait / landscape)

    移动设备的屏幕有两个方向: landscape(横屏)和portrait(竖屏),在某些情况下需要获取设备的屏幕方向和监听屏幕方向的变化,因此可以使用Javascript提供的 MediaQueryL ...

  5. Android监听屏幕解锁和判断屏幕状态

    开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为 android.intent.action.USER_PRESENT的广播,则可以监听解锁事 ...

  6. pc端监听屏幕实现导航固定定位

    要点:占位符 js,监听屏幕滚动事件,当滚动条距离浏览器顶部的距离 大于 要固定定位开始以下元素的距离,则给要固定元素添加fixed样式. 初始化方法时,要给占位符添加样式 function sort ...

  7. [Swift通天遁地]三、手势与图表-(2)监听手势事件自由拖动图像视图

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. [JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

    -->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的oncl ...

  9. JS 中的事件绑定、事件监听、事件委托

    事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有 ...

随机推荐

  1. bzoj2982: combination

    借(cao)鉴(xi)自popoqqq大爷的lucas定理的写法 #include<cstdio> #include<cstring> #include<cctype&g ...

  2. Context上下文对象(抄书的)

    Servlet上下文 ServletContext 上下文接口    ServletContext接口    每一个应用都有唯一的一个上下文对象,即为ServletContext对象    Servl ...

  3. UVA 11354 Bond 邦德 (RMQ,最小瓶颈MST)

    题意: n个城市,m条路,每条路有个危险值,要使得从s走到t的危险值最小.回答q个询问,每个询问有s和t,要求输出从s到t最小的危险值.(5万个点,10万条边) 思路: 其实要求的是任意点对之间的最小 ...

  4. C的结构体使用

    C的结构体演示 #include <stdio.h> struct A //建立结构体A { char *name; int s1; struct A *next; }; void mai ...

  5. 【C#学习笔记】数组使用

    using System; namespace ConsoleApplication { class Program { static void Main(string[] args) { //int ...

  6. Ensemble Learning 之 Adaboost

    Boosting Boosting 是一种提升方法,将一系列弱学习器组合成为强学习器.基于样本权重的 Boosting 的工作流程是这样的,给定初始训练集构建一个基学习器,根据基学习器对训练样本的分布 ...

  7. a标签的href劫持,做判断后在跳转

    $.ajax({ type: "POST", url: "/resource/logincheck", data: {id: id}, success: fun ...

  8. uva 11752 - The Super Powers

    这个题   任意一个数,他的幂只要不是质数则可以分解成两个数的乘   判断有没有溺出  i×i  则用最大的那个数 Max/i < i 吗 #include<iostream> #i ...

  9. mysql:mysql_query(): Unable to save result set

    解决方式 方式1: 原因:数据表索引损坏 方案:使用repair table 表名; 方式2: 原因:打开表的数据量太大,内存不够. 方案:配置my.ini 调整内存能解决

  10. linux echo命令的-n、-e两个参数

    echo -n 不换行输出 $echo -n "123" $echo "456" 最终输出 123456 而不是 123 456 echo -e 处理特殊字符 ...