美文网首页
iOS之手势与触摸

iOS之手势与触摸

作者: hoggenWang | 来源:发表于2016-03-10 21:02 被阅读124次

  触摸是iOS的交互核心,他不简单局限于“按下按钮”或“点击键盘”,还包括手势识别在内的一系列手势;

触摸#

  触摸包含以下信息:

  • 发生的地方
  • 处在哪个阶段(按下,移动,抬起)
  • 点击次数
  • 时间
      每个触摸操作及其信息都保存在UITouch对象里面,而这样一组UITouch对象则放在UIEvert对象里面传递。
    触摸的五个阶段:
    UITouchPhaseBegan---开始触碰
    UITouchPhaseMoved---移动
    UITouchPhaseStationary---从上个事件后仍在触碰但未移动
    UITouchPhaseEnded---结束触碰
    UITouchPhaseCancelled--不在追踪触碰
    UIResponder类中的触摸事件响应
  • touchesBagan: withEvent: --当开始触碰屏幕,系统会调用这个方法
  • touchesMoved: withEvent:--当触摸屏幕并持续移动时,系统会调用此方法
  • touchesEnded: withEvent:--触摸过程结束调用此方法
  • touchesCancelled: withEvent:--触摸阻断,系统调用方法

  这些方法通常需要UIView或者UIViewController来实现,相当于复写父类的方法。对视图的触摸涉及到响应链,这里有兴趣的朋友可以查查相关响应规则。
  另外iOS支出单点触摸(Single-Touch)和多点触摸(Multi-Touch);

手势识别器#

  这是苹果公司提供的一种强大的识别方式;你懂的!
iOS SDK内置的几种手势

  • 点击(tap)--一根或多个手指触碰;可以通过gestureRecongnizers属性来设定想要的点击次数
  • 滑动(swipe)--上下左右所作出的短距离单点触碰或者多点触碰,这种手势注意的是不能太超出主方向
  • 双指聚拢(pinch)--挤压或拉伸
  • 旋转(rotate)--两个手指顺时针或者逆时针移动,识别器会返回吧旋转的角度和速度返回给开发者
  • 拖动(pan)--拿手指在屏幕上作出拖拽的 动作,这里会识别到坐标的变化
  • 长按(long press)--这个不解释
     下面我们用代码演示如何用触碰和手势识别器分别实现拖拽功能:
@implementation DragView
{
CGPoint startLocation;
}
-(instancetype)initWithImage:(UIImage *)anImage
{
self=[super initWithImage:anImage];
if(self)
{
self.userInteractionEnabled=YES;
}
return self;
}
-(void)touchBegan:(NSSet *)touches withEvent:(UIEvent *)event{
startLocation =[[touches anyObject] locationInView:self];
[self.superview bringSubviewToFront:self];//让触摸的视图显示在屏幕最前方
}
-(void)touchMoved:(NSSet *)touches withEvent:(UIEvent *)event{
CGPiont pt=[[touches anyObject] locationInView:self];
float dx=pt.x-startLocation.x;
float dy=pt.y-startLocation.y;
CGPiont newcenter=CGPonitMake(
self.center.x+dx,self.center.y+dy);
self.center=newcenter;
}

 用手势识别器实现

@implementation DragView
{
CGPoint spreviousLocation;
}
-(instancetype)initWithImage:(UIImage *)anImage
{
self=[super initWithImage:anImage];
if(self)
{
self.userInteractionEnabled=YES;
UIPanGestureRecongnizer *panGesture=[[UIPanGestureRecongnizer alloc]initWithTarget:self action: @selector(handlePan:)];
self.gestureRecognizers=@[panGesture];
}
return self;
}
-(void)touchBegan:(NSSet *)touches withEvent:(UIEvent *)event{
spreviousLocation =self.center;
[self.superview bringSubviewToFront:self];//让触摸的视图显示在屏幕最前方
}
-(void)hanlePan:(UIPanGestureRecongnizer *)sender{
CGPoint tanslation=[sender translationInView:self,superview];
self.center=CGPonitMake(spreviousLocation.x+tanslation.x,spreviousLocation.y+tanslation.y);
}

相关文章

  • iOS 事件以及手势的处理

    iOS 事件以及手势的处理 首先引用深入浅出iOS事件机制,iOS触摸事件处理详解,详解iOS触摸事件与手势识别三...

  • 《iOS事件触摸与手势》

    iOS事件触摸与手势 一、事件分发处理【由外到内】在iOS中发生触摸后,事件会加到UIApplication事件队...

  • iOS 手势与触摸

    响应触摸方法: 添加了手势的控件常需要设置的属性:(UILabel,UIImageVIew默认不允许用户交互) 手...

  • 产品新人必备的iOS人机交互指南(转译)三

    2.10 手势 人们通过在触摸屏上执行手势来与iOS设备进行交互。这些手势与内容有着密切的个人联系,增强了屏幕对象...

  • ios 事件传递和响应

    史上最详细的iOS之事件的传递和响应机制-原理篇iOS触摸事件传递响应之被忽视的手势识别器工作原理手势事件中can...

  • 用户交互(9)-手势

    手势 用户通过在触摸屏上使用手势与iOS设备交互。这些手势引出了与内容的亲近个人联系,增强了对屏幕对象的直接操作感...

  • iOS之手势与触摸

      触摸是iOS的交互核心,他不简单局限于“按下按钮”或“点击键盘”,还包括手势识别在内的一系列手势; 触摸#  ...

  • iOS手势识别器

    1.手势识别器 1.手势识别器是iOS中比较抽象的一个类,用于识别一个手势,所谓手势:有规律的触摸。是对触摸事件做...

  • iOS 手势操作 geekband

    什么是触摸手势 触摸手势的原理 UIControl 离散与断续 手势识别状态 小案例 新建文件在storyboar...

  • 事件处理

    iOS事件分类以及相关方法 在iOS中事件分为三类: 触摸事件:通过触摸、手势进行触发(例如手指点击、缩放、旋转)...

网友评论

      本文标题:iOS之手势与触摸

      本文链接:https://www.haomeiwen.com/subject/izvtlttx.html