使用UIGestureRecognizer监听屏幕事件

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

这里用第二种办法:

UIGestureRecognizer有很多继承自它的UIxxxGestureRecognizer:

 UILongPressGestureRecognizer

 UIPanGestureRecognizer

 UIPinchGestureRecognizer

 UIRotationGestureRecognizer

 UISwipeGestureRecognizer

 UITapGestureRecognizer

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

//
//  MainViewController.h
//  testapple
//
//  Created by kiri on 12-5-8.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import 
#import "JSONKit.h"
#import "AppDelegate.h"
#import "GCDAsyncSocket.h"
#import 


@interface MainViewController : UIViewController
{
	UIImage *aaaimg;
    UIImage *bbbimg;
    int index;
}

@property (nonatomic,retain) UIImageView *imageview;

@end

//
//  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 = 11;
    
    UITapGestureRecognizer *singleOne = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onviewtabed:)];
    singleOne.numberOfTouchesRequired = 1;
    singleOne.numberOfTapsRequired = 1;
    singleOne.delegate = self;
    [self.view addGestureRecognizer:singleOne];
    
    
    UILongPressGestureRecognizer *longpress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onlongtabed:)];
    longpress.minimumPressDuration = 1.0;///至少按1秒
    longpress.numberOfTouchesRequired = 1;//只有一个触点
    [self.view addGestureRecognizer:longpress];
    [longpress release];
    
	UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
	[button setTitle:@"button" forState:UIControlStateNormal];
	button.frame = CGRectMake(0, 0, 300, 50);
	[button addTarget:self action:@selector(onbuttonclick) forControlEvents:UIControlEventTouchUpInside];
	[self.view addSubview:button];    
    
    UITapGestureRecognizer *singleTwo = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onviewtabed:)];
    singleTwo.numberOfTouchesRequired = 1;
    singleTwo.numberOfTapsRequired = 1;
    singleTwo.delegate = self;
    
    self.imageview = [[UIImageView alloc] init];
    imageview.frame = CGRectMake(0, 70, 320, 240);
    imageview.image = [UIImage imageNamed:@"test.png"];
    imageview.tag = 22;
    [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



你可能感兴趣的:(ios)