UITouch:触摸控件类   UIEvent:事件类

❤️❤️❤️UITouch的介绍❤️❤️❤️

一、触摸状态类型枚举

typedef NS_ENUM(NSInteger, UITouchPhase) {

UITouchPhaseBegan,             // 开始触摸

UITouchPhaseMoved,             // 触摸移动

UITouchPhaseStationary,       // 触摸没有移动

UITouchPhaseEnded,             //触摸结束

UITouchPhaseCancelled,         //取消触摸

};

@interface UITouch : NSObject

二、属性:

//时间戳记录了触摸事件产生或变化时的时间,单位是秒

@property(nonatomic,readonly) NSTimeInterval   timestamp;

//当前触摸事件在一个周期中所处的状态

@property(nonatomic,readonly) UITouchPhase  phase;

//表示短时间内点按屏幕的次数

@property(nonatomic,readonly) NSUInteger  tapCount;

//触摸的主半径

@property(nonatomic,readonly) CGFloat majorRadius;

//触摸的主半径的公差

@property(nonatomic,readonly) CGFloat majorRadiusTolerance;

//触摸产生时所处的窗口。由于窗口可能发生变化,当前所在的窗口不一定是最开始的窗口

@property(nonatomic,readonly,retain) UIWindow    *window;

//触摸产生时所处的视图。由于视图可能发生变化,当前视图也不一定时最初的视图

@property(nonatomic,readonly,retain) UIView      *view;

//触摸手势数组

@property(nonatomic,readonly,copy)   NSArray   *gestureRecognizers;

三、方法:

//返回当前触摸点的位置

- (CGPoint)locationInView:(UIView *)view;

//返回上一个触摸点的位置

- (CGPoint)previousLocationInView:(UIView *)view;

@end

四、由于触摸点被放在了NSSet,所以通过NSSet集合的一个属性和方法可以获取触摸点:

//获取全部的触摸点

@property (readonly, copy) NSArray *allObjects;

//获取当前触摸点

- (id)anyObject;

===============================================================

❤️❤️❤️UIEvent的介绍❤️❤️❤️

//输入事件类型枚举

typedef NS_ENUM(NSInteger, UIEventType) {

UIEventTypeTouches,             //触摸事件

UIEventTypeMotion,              //运动事件

UIEventTypeRemoteControl,    //远程控制事件

};

//输入事件不同类型的一些具体事件枚举

typedef NS_ENUM(NSInteger, UIEventSubtype) {

UIEventSubtypeNone                              = 0,

UIEventSubtypeMotionShake                       = 1

UIEventSubtypeRemoteControlPlay                 = 100,

UIEventSubtypeRemoteControlPause                = 101,

UIEventSubtypeRemoteControlStop                 = 102,

UIEventSubtypeRemoteControlTogglePlayPause      = 103,

UIEventSubtypeRemoteControlNextTrack            = 104,

UIEventSubtypeRemoteControlPreviousTrack        = 105,

UIEventSubtypeRemoteControlBeginSeekingBackward = 106,

UIEventSubtypeRemoteControlEndSeekingBackward   = 107,

UIEventSubtypeRemoteControlBeginSeekingForward  = 108,

UIEventSubtypeRemoteControlEndSeekingForward    = 109;

};

//类

@interface UIEvent : NSObject

//属性

@property(nonatomic,readonly) UIEventType    type ;            //事件类型

@property(nonatomic,readonly) UIEventSubtype  subtype ;     //同一事件类型的具体事件

@property(nonatomic,readonly) NSTimeInterval  timestamp;    //事件触发时间间隔

//方法

※所有触摸点

- (NSSet *)allTouches;

※窗体上的触摸点

- (NSSet *)touchesForWindow:(UIWindow *)window;

※视图上的触摸点

- (NSSet *)touchesForView:(UIView *)view;

※手势触摸点

- (NSSet *)touchesForGestureRecognizer:(UIGestureRecognizer *)gesture;

@end

五、举例如下:演示触摸事件(都是用鼠标代替手指在模拟器上进行测试)

实例一:打印触摸输出

1.设置用户交互和触摸点

//支持用户交互,能够处理触摸事件
self.view.userInteractionEnabled = YES; //支持多点触摸
self.view.multipleTouchEnabled = YES;

2.实现UIResponser中触摸的4个事件

触摸开始

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"触摸开始"); //取出一个touch对象
UITouch *touch = [touches anyObject]; //取出当前点
CGPoint location = [touch locationInView:self.view]; //取出上一点
CGPoint previousLocation = [touch previousLocationInView:self.view]; NSLog(@"%@,%@",NSStringFromCGPoint(location),NSStringFromCGPoint(previousLocation)); //遍历每一个touch对象
[touches enumerateObjectsUsingBlock:^(UITouch *touch, BOOL *stop) { }];
}

触摸移动

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"触摸移动");
}

触摸结束

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"触摸结束");
}

触摸取消(该事件在模拟器不好演示)

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"触摸取消");
}

演示结果如下:

1.在屏幕上开始触摸和结束触摸时:

-- ::24.875 -touch[:] 触摸开始
-- ::24.875 -touch[:] {219.5, },{219.5, }
-- ::24.983 -touch[:] 触摸结束

2.在屏幕上触摸移动时:

-- ::00.388 -touch[:] 触摸移动
-- ::00.413 -touch[:] 触摸移动
-- ::00.430 -touch[:] 触摸移动

实例二:触摸时,视图变色(每触摸一次,颜色就交替改变)

<1>布局故事板,在视图中在拖一个试图UIView控件,设置合适大小和背景颜色

<2>自定义一个试图类,将控件与该类关联

       

<3>在自定义类myView.m中实现触摸开始事件

//开始触摸
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if ([self.backgroundColor isEqual:[UIColor redColor]])
{
self.backgroundColor = [UIColor purpleColor];
}
else
{
self.backgroundColor = [UIColor redColor];
}
}

<4>演示结果如下

开始颜色:红色                        触摸一次:变为紫色                 再触摸一次:又变为红色

   

实例三:触摸移动时,移动红色试图位置

<1>布局故事板,在视图中在拖一个试图UIView控件,设置合适大小和背景颜色

<2>自定义一个试图类,将控件与该类关联,同时将视图IBOutLet到视图控制器类中

       

<3> 在控制器类ViewController.m中实现触摸移动事件

//添加移动事件
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//获取触摸对象touch
UITouch *touch = [touches anyObject]; //当前触摸点
CGPoint location = [touch locationInView:self.view]; //设置触摸点只有在myView中,才可以移动myView视图
CGPoint point = [touch locationInView:self.myView];
if ([self.myView pointInside:point withEvent:event])
{
//上一个触摸点
CGPoint previousLocation = [touch previousLocationInView:self.view]; //计算位移
CGFloat xOffset = location.x - previousLocation.x;
CGFloat yOffset = location.y - previousLocation.y; //设置视图新的位置
CGPoint center = self.myView.center;
self.myView.center = CGPointMake(center.x+xOffset, center.y+yOffset);
} }

<4>演示结果如下:触摸红色视图位置拖拽移动即可

    

     

iOS:触摸控件UITouch、事件类UIEvent的更多相关文章

  1. iOS控件之UIResponder类

    iOS控件之UIResponder类 在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,我们知道UIApplication.UIView.UIViewController这几个 ...

  2. Android 使用代码主动去调用控件的点击事件(模拟人手去触摸控件)

    使用代码主动去调用控件的点击事件(模拟人手去触摸控件) //View 可以是LinearLayout,Button,TextView View.performClick();

  3. C# 有关控件、自定义类事件中的委托链的获取、移除操作

    直接来代码吧,这样干脆直接,也不耽误我午休了.一切尽在源码中. public class ControlEventTool { /// <summary> /// 移除控件的某类事件, 如 ...

  4. iOS常见控件的基本使用

    UI相关类继承关系 UIView 常见属性和方法 UIView属性 UIView方法 UIControl 常用控件 UIImageView 图片显示控件android ImageView UISlid ...

  5. 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

    [源码下载] 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox 作者:webabcd ...

  6. 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

    介绍背水一战 Windows 10 之 控件(文本类) RichTextBlock RichTextBlockOverflow RichEditBox 示例1.RichTextBlock 的示例Con ...

  7. IOS—UITextFiled控件详解

    IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...

  8. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  9. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

随机推荐

  1. MyBatis3-与Spring 4集成

    继续使用前一篇的例子http://www.cnblogs.com/EasonJim/p/7052368.html,实际项目中,通常会用Spring来管理DataSource等.充分利用Spring基于 ...

  2. opencv 图像转换

    #include <cv.h> #include <highgui.h> int main() { CvPoint2D32f srcTri[], dstTri[]; CvMat ...

  3. ActiveMQ基于JMS的pub/sub传播机制

    原文地址:[ActiveMQ实战]基于JMS的pub/sub传播机制 发布订阅模型 就像订阅报纸,我们可以选择一份或者多份报纸.比如:北京日报.人民日报.这些报纸就相当于发布订阅模型中的topic.如 ...

  4. LeetCode解题报告——Convert Sorted List to Binary Search Tree & Populating Next Right Pointers in Each Node & Word Ladder

    1. Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in ...

  5. 【DUBBO】dubbo的Router接口

    Router服务路由, 根据路由规则从多个Invoker中选出一个子集AbstractDirectory是所有目录服务实现的上层抽象, 它在list列举出所有invokers后,会在通过Router服 ...

  6. 调用git命令行执行更新的思路

    cd /usr/local/software/CloudPlatformUtil/GitLab # CentOS6.5自带的git版本是1.7.1 # 安装高版本git wget -O git.zip ...

  7. windows下rabbitmq(架构师必备神器)集群搭建

    准备2台机器,例如:computera: 10.0.0.151   computerb:10.0.0.234  都安装erlang环境和rabbitmq服务,注意otp环境和rabbitmq服务必须版 ...

  8. 对angular.js的一点理解

    最近一直在学习angular.js.不得不说和jquery相比有很大不同,有很多的不同点,之前也用过Knockout.js 但是两者还是有一定的区别的,首先knockout.js是基于Mvvm的,是几 ...

  9. vue-cli中引入jquery方法

    这里有个详解,当然,仅仅是安装jq的话下面这个办法就够了.传送门 在webpack.base.conf.js里加入 var webpack = require("webpack") ...

  10. 转:攻击JavaWeb应用[7]-Server篇[1]

    转:http://static.hx99.net/static/drops/tips-604.html 攻击JavaWeb应用[7]-Server篇[1] 园长 · 2013/09/22 15:39 ...