[IOS]触摸事件和手势

如何使用IOS中的触摸事件和手势,这也是增加我们IOS应用的一个重要的一个功能?下面我来用一个简单的Demo来入门一下吧!

实现的功能具备右滑动和双击操作:

双击切换图片:

友情提醒:要实现两点滑动,按住alt键和shift键试试

操作步骤:

1.创建一个SingleView的项目,在页面上添加一个子view和几个label;

2.ViewController.h:

#import <UIKit/UIKit.h>

@interface DXWViewController : UIViewController
@property (retain, nonatomic) IBOutlet UILabel *state;
@property (retain, nonatomic) IBOutlet UILabel *tapCount;
@property (retain, nonatomic) IBOutlet UILabel *xPoint;
@property (retain, nonatomic) IBOutlet UILabel *yPoint;
@property (retain, nonatomic) IBOutlet UILabel *touchNum;
@property (retain, nonatomic) IBOutlet UIView *otherView;
@property(retain,nonatomic)UIImageView *imgView;
@property(retain,nonatomic)UIImage *img;
@end

3.ViewController.m:

#import "DXWViewController.h"

@interface DXWViewController ()

@end

@implementation DXWViewController

//加载图片
-(void)loadimag:(NSString *)imgName
{
    self.img = [UIImage imageNamed:imgName];
    self.imgView = [[UIImageView alloc] initWithImage:self.img];
    CGRect rec = CGRectMake(5, 5, 150, 117);
    self.imgView.frame = rec;
    [self.otherView addSubview:self.imgView];

    [self.imgView release];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.img = [UIImage imageNamed:@"flower1.jpg"];
	//花开
    [self loadimag:@"flower1.jpg"];

}

-(void)fun:(NSSet *)touches
{
    UITouch *touch = [touches anyObject];
    int tapCount = [touch tapCount];
    CGPoint point = [touch locationInView:self.view];

    self.tapCount.text = [NSString stringWithFormat:@"tapCount %d",tapCount];
    int touchNum = [touches count];
    self.xPoint.text = [NSString stringWithFormat:@"x %.1f",point.x];
    self.yPoint.text = [NSString stringWithFormat:@"y %.1f",point.y];
    //接受多点,要设置允许多点
    self.touchNum.text = [NSString stringWithFormat:@"touchNum %d",touchNum];

}
//返回点击次数
-(int)getNumber:(NSSet *)touches
{
    UITouch *touch = [touches anyObject];
    int tapCount = [touch tapCount];
    CGPoint point = [touch locationInView:self.view];

    self.tapCount.text = [NSString stringWithFormat:@"tapCount %d",tapCount];
    int touchNum = [touches count];
    self.xPoint.text = [NSString stringWithFormat:@"x %.1f",point.x];
    self.yPoint.text = [NSString stringWithFormat:@"y %.1f",point.y];
    //接受多点,要设置允许多点
    self.touchNum.text = [NSString stringWithFormat:@"touchNum %d",touchNum];
    return tapCount;

}
BOOL flag = true;

float x=0;

//支持多点
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    //如果有子view的话如何获取子view的触摸事件
    //touches = [event touchesForView:self.otherView];
    self.state.text = @"touchesBegin";
    [self fun:touches];
    [self fun:[event touchesForView:self.otherView]];

    if ([self getNumber:[event touchesForView:self.otherView]] == 2) {
        if (flag) {

            [self loadimag:@"flower.jpg"];
            flag = false;
        }
        else
        {
            [self loadimag:@"flower1.jpg"];
            flag = true;
        }
    }

    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.otherView];
    x = point.x;

}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{

}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    //自己自定义手势
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.otherView];
    float moveX = 0;
    moveX = point.x;
    if ((moveX-x)>100) {
        NSLog(@"右滑");
    }
}

- (void)dealloc {
    [_state release];
    [_tapCount release];
    [_xPoint release];
    [_yPoint release];
    [_touchNum release];
    [_otherView release];
    [super dealloc];
}
@end

4.要注意,要把页面设置一下,设置能多点识别的属性。

5.也可以通过拖放一个手势控件来实现手势,在页面中有一个Swipe Gesture Recognizer的手势控件

- (void)viewDidLoad
{
    [super viewDidLoad];
    //代码创建手势
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(gesture:)];
    swipe.direction = UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft;

    //添加上手势,控件添加
    [self.view addGestureRecognizer:swipe];
}

-(void)gesture:(id)sender
{
    NSLog(@"left or right");
}

- (IBAction)swipe:(id)sender {
    NSLog(@"right");
}

6.实现单击/双击触发事件      
 

-(void)viewLoad
{
//点击事件
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(fun1)];
    //单点触摸
    tap.numberOfTouchesRequired = 1;
    //点击几次,如果是1就是单击
    tap.numberOfTapsRequired = 1;
    [self.view addGestureRecognizer:tap];
}

//一次点击事件
-(void)fun1
{
    NSLog(@"click1");
}

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

Unity QQ群:858550         cocos2dx QQ群:280818155

====================== 相互学习,共同进步 ===================

 

转载请注明出处:http://blog.csdn.net/dingxiaowei2013/article/details/17587497

欢迎关注我的微博:http://weibo.com/u/2590571922

                                           

时间: 2024-12-11 04:28:06

[IOS]触摸事件和手势的相关文章

iOS开发之触摸事件以及手势_IOS

iOS中的事件分为三类:触摸事件.加速计事件.远程控制事件.只有继承了UIResponder的对象才能接收并处理事件,称之为"响应者对象".UIApplication.UIViewController.UIView都继承自UIResponder.UIResponder内部提供的方法来处理事件: 触摸事件:touchesBegan.touchesMoved.touchesEnded.touchesCancelled 加速计事件:motionBegan.motionEnded.motion

iOS开发之触摸事件及手势

1.iOS中的事件 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 2.响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象", UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. 2.UIResponder 继承了UIResponder就可以处理事件.UIResponder内部

iOS触摸事件的使用详解

触摸事件在iOS中是最常用的事件,这里我们来介绍下触摸事件. 在下面的例子中定义UIImageView.首先我们在TouchEventViewController中添加触摸事件,并利用触摸移动事件来移动Image,具体代码如下: @implementation TouchEvenViewController   - (void)viewDidLoad {     [super viewDidLoad];          UIImageView * _image=[[KCImage alloc]

iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件.远程控制事件等展开学习: iOS事件简介 触摸事件 手势识别 运动事件 远程控制事件 iOS事件 在iOS中事件分为三类: 触摸事件:通过触摸.手势进行触发(例如手指点击.缩放) 运动事件:通过加速器进行触发(例如手机晃动) 远程控制事件:通过其他远程设备触发(例如耳机控制按钮) 下图是苹果官方对于

移动端js触摸事件详解_javascript技巧

在移动开发中,一种较为容易的做法是,先在桌面上开始原型设计,然后再在打算要支持的设备上处理移动特有的部分.多点触摸正是难以在PC上进行测试的那些功能之一,因为大部分的PC都没有触摸输入.  不得不在移动设备上进行的测试有可能会拉长你的开发周期,因为你所做的每项改变都需要提交代码到服务器上,接着再加载到设备上.然后,一旦运行后,对应用也就没有太多的调试了,因为平板电脑和智能手机都很缺乏web开发者所用的工具. 这个问题的一个解决方案是在开发机器上模拟触发事件.对于单点触摸,触摸事件可以基于鼠标事件

方法-IOS 触摸 手势和tableView cell的点击冲突

问题描述 IOS 触摸 手势和tableView cell的点击冲突 刚开始 书写的方法 // 触摸 (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //取出touches集合元素 UITouch *touch = [touches anyObject]; NSLog(@"%@", touch); CGPoint point = [touch locationInView:self.view]; // 打

iOS开发之触摸事件_IOS

一.事件分发处理[由外到内] 在iOS中发生触摸后,事件会加到UIApplication事件队列,UIApplication会从事件队列取出最前面的事件进行分发处理,通常会先分发给主窗口,主窗口会调用hitTest:withEvent:方法,查找适合的事件触发视图,即 找到被触摸的视图对象 寻找流程如下: 在顶级视图(keyWindow的视图)上调用pointInside:withEvent:方法判断触摸点是否在当前视图内: 如果返回NO,那么keyWindow的hitTest:withEven

javascript-jQuery触摸事件在ios中无效

问题描述 jQuery触摸事件在ios中无效 在ios中使用jQuery的问题: $(document).ready(function(){ var iX = 0,iY = 0,fX = 0,fY = 0; document.addEventListener('touchstart', function(e) { var touch = e.touches[0]; iX = touch.pageX; iY = touch.pageY; }, false); document.addEventLi

iOS开发中使用cocos2d添加触摸事件的方法_IOS

CCLayer类是用来接收触摸输入的.不过你要首先启用这个功能才可以使用它.你通过设置isTouchEnabled为YES来让层接收触摸事件: 复制代码 代码如下: self.isTouchEnabled = YES; 此项设定最好在init方法中设置.你可以在任何时间将其设置为NO或者YES. 一旦启用isTouchEnabled属性,许多与接收触摸输入相关的方法将会开始被调用.这些事件包括:当新的触摸开始的时候,当手指在触摸屏上移动的时候,还有在用户手指离开屏幕以后.很少会发生触摸事件被取消