搜档网
当前位置:搜档网 › IOS触摸事件 touchEvent

IOS触摸事件 touchEvent

IOS触摸事件 touchEvent
IOS触摸事件 touchEvent

IOS事件处理

概述

事件

一个事件即由硬件捕捉并产生的一个表示用户操作设备的对象并发送给IOS——例如:一个手指点击屏幕或摇动设备。许多event都是UIKit框架中UIEvent类的实例。UIEvent 对象可能封装了用户事件所关联的状态,像关联的点击。UIEvent对象同时也记录了事件所产生的时刻。当一个用户事件发生时——例如,当手指点击屏幕并在其上移动——IOS连续发送事件对象给应用程序进行处理。

UIKit当前可识别三种类型的事件:点击事件,摇动事件及远程控制事件。UIEvent类对其定义了enum常量:

typedef enum {

UIEventTypeTouches,

UIEventTypeMotion,

UIEventTypeRemoteControl

} UIEventType;

typedef enum {

UIEventSubtypeNone = 0,

UIEventSubtypeMotionShake = 1,

UIEventSubtypeRemoteControlPlay = 100,

UIEventSubtypeRemoteControlPause = 101,

UIEventSubtypeRemoteControlStop = 102,

UIEventSubtypeRemoteControlTogglePlayPause = 103,

UIEventSubtypeRemoteControlNextTrack = 104,

UIEventSubtypeRemoteControlPreviousTrack = 105,

UIEventSubtypeRemoteControlBeginSeekingBackward = 106,

UIEventSubtypeRemoteControlEndSeekingBackward = 107,

UIEventSubtypeRemoteControlBeginSeekingForward = 108,

UIEventSubtypeRemoteControlEndSeekingForward = 109

} UIEventSubtype;

每个事件都有其对应的事件类型和子事件类型,它们可以由UIEvent对象的type和subtype属性进行访问。事件类型包括点击事件,摇动事件及远程控制事件。在IOS3.0

中,包括了摇动子事件类型(UIEventSubtypeMotionShake)及多种远程控制子事件类型;点击事件所对应的子事件类型为UIEventSubtypeNone。

你不应该在你代码中retain一个UIEvent对象。如果你需要保留一个事件对象的当前状态为以后进行处理,你应该通过合适的方法(使用实例变量或字典对象)拷贝或保存状态值。

事件传递

从事件发生到其处理的对象,传递要经过相当长及特殊的一段过程。当用户点击设备屏幕时,IOS捕捉到一系列的触摸,将其打包到UIEvent对象中并放置到应用程序活动事件队列中。如果系统检测到摇动设置为一个有效的移动事件,则也将其打包并放置到应用程序活动事件队列中。单例UIApplication对象管理应用程序,从事件队列中取出最前面的事件并将其分发以便处理。通常,其发送事件给应用程序的主窗口——即聚焦于用户交互的窗口——窗口对象代表窗口再发送事件给初始对象进行处理。初始对象对于点击事件和摇动事件是不相同的。

点击事件。窗口对象使用hit-testing及响应者链表去找到对该事件响应的视图。在hit-testing中,窗口找到视图继承树中最上层的视图并调用hitTest:withEvent:方法;该方法递归调用视图继承树中每个视图的pointInSide:withEvent:方法并在其返回true后,从该视图开始沿着继承树向下,直到找到一个点击事件在其范围之内的子视图。该子视图即为hit-test视图。

如果该hit-test视图无法处理该事件,则事件沿着响应者链表进行传递直至找到能处理该事件的视图。一个点击对象在其生命周期中一直与hit-test视图相关联,即使点击对象移动到一样该视图之外(?)。

摇动及远程控制事件。窗口对象发送每个摇动及远程控制事件给首响应者进行处理。

尽管hit-test视图和首响应者通常是同一个视图对象,但它们并不总是相同。

UIApplication对象及每个UIWindow对象在sendEvent:方法中进行事件传递,因为这些方法是从应用程序传递来事件的汇集点,所以你可以继承UIApplication或UIWindow并重载sendEvent:方法来监控事件(只有少量的应用程序需要此实现)。如果你重载了该方法,请确保调用了超类的sendEvent:方法。无论如何都不要篡改事件的分发。

响应对象和响应者链

前面的讨论已涉及到响应者的概念。那什么是响应者及它是如何适应消息分发的框架呢?

响应者对象是一个能接收并处理事件的对象。UIResponser是所有响应者对象对的基类,另一个熟悉并简单的名字为响应者。该基类定义了一系列编程接口,不但为事件处理进行服务而且还提供了通用的响应行为处理。UIApplication,UIView及所有作为UIView子类的UIKit类(包括UIWindow)都直接及间接的继承自UIResponser,所有的这些类的实例都是响应者对象。

首响应者是应用程序的一个响应者对象(通常为UIView)作为接收除点击事件以外其它事件的首个响应对象。UIWindow对象通过消息发送摇动或远程控制事件给首响应者,让其对事件进行优先处理。为了能接收到UIWindow对象发送来的消息,响应者对象必需申明canBecomeFirstResponser方法并返回Yes;并能接收到becomeFirstResponser消息(该方法可以在对象内部进行调用)。首响应者是Window中的第一个视图用以接收以下的事件或消息:

摇动事件——通过调用UIResponser的摇动处理方法

远程控制事件——通过调用UIResponser的remoteControlReceivedWithEvent方法操作消息——当用户操作了Control(像按钮或滑块)便没有指定消息的接收者

Editing-Menu Message

首响应者也在文字编辑中扮演作用。当对Text View或Text Field聚焦进行输入时即成为了首响应者,并促使了虚拟键盘的出现。

注:应用程序必需显式的为摇动,远程控制事件及editing-menu消息处理设置首响应者,当用户点击Text View或Text Field时,UIKit自动将其设置为首响应者。

如果首响应者或hit-test视图不处理收到的消息,UIkit则通过消息的形式将事件转发到响应者链的下一个响应者,看其是否能过该消息进行处理。

响应者链是一系列已连接的响应者对象,事件或消息在其路径上进行传递。在其上允许响应者将事件处理的责任传递给高层的其它响应者。应用程序根据响应者的处理能力将事件向上进行传递。因为hit-test视图是一个响应者对象,当应用程序接收到点击事件时可能会对其进行更进一步的处理。响应者链包括一系列的下一个响应者(每一个通过nextResponser方法返回)。如下图所示。

当系统转发了一个点击事件,首先将其发送给特殊的视图。对于点击事件,这个特殊视图为调用hitTest:withEvent方法所返回的视图;对于它事件或消息,该特殊视图即为首响应者。如果首个视图无法处理收到的事件,则其通过在响应者链中的特殊路径向上传递。

1.hit-test视图或首响应者发送事件或消息给其对应的视图控制器,如果该控制器存

在;如果控制器不存在,则将其传递给它的父视图

2.如果视图或它的控制器无法处理收到的事件或消息,则将其传递给该视图的父视

3.每一个在视图继承树中的上层视图如果不能处理收到的事件或消息,则重复上面

的步骤1,2

4.在视图继承树的最上层视图,如果也不能处理收到的事件或消息,则其将事件或

消息传递给窗口对象进行处理

5.如果窗口对象也不能进行处理,则其将事件或消息传递给UIApplication对象

6.如果UIApplication也不能处理该事件或消息,则将其丢弃

如果你有自定义的处理摇动,远程控制事件或其它消息的视图,你不应该将事件或消息直接发送到响应者链的下一个响应者。取代方法是调用父类的当前事件处理方法,让UIKit 对消息传递进行处理。

多点触摸事件

触摸事件在IOS中是基于多点触摸模型。取代鼠标和键盘,用户通过触摸设备的屏幕来操作对象,输入数据以及实现其它意愿。IOS识别的一个或多个手指对屏幕进行触摸并将其作为多点触摸序列的一部分。该序列以用户第一个手指触摸屏幕开始一直持续到最后一个手指离开屏幕。IOS通过触摸序列来跟踪手指在屏幕上的移动并记录它们的特征,包括手指在屏幕上的位置以及触摸发生的时间。应用程序通常会识别一组触摸为一个手势并对其进行相

应的响应,例如:放大缩小屏幕内容用于响应pinch手势,对屏幕内容进行滚动用于响应flick手势。

UIKit中许多类对于多点触摸的处理有别于其对象。对于UIControl类的子类则特别如此,像UIButton和UISlider。对于从UIControl继承的对象通常称为控制对象,它们期望收到特定的手势,像点击或向某方向进行拖动。通过适应的配置,当手势发生时它们会发送操作消息给目标对象。其它的UIkit类以不同的方式对手势进行响应,以ScrollView为例,为表视图,文本视图以及其它有大块内容区域视图提供滚动行为。

有些应用程序不需要直接响应事件,它们信赖于UIkit类所提供的行为。如果你创建了一个UIView的子类并且希望该视图对触摸进行响应,你就必须为处理触摸事件而编写代码。如果你希望UIKit中的对象对于事件有不同的响应,你就必须对UIkit中使用到的该类进行继承并重载合适的事件处理方法。

事件和触摸

在IOS中,触摸表示手指在屏幕上的接触或移动并作为唯一多点触摸序列的一部分。例如:挤(pinch-close)手势有两个触摸:两个手指在屏幕上以相反的方向向对方移动。同时也有一个手指操作的简单手势,例如:单击,双击,拖动和滑动(flick)。应用程序也有可能处理复杂的手势。

一个具有UIEventTypeTouches类型的UIEvent对象表示一个触摸事件。当手指触摸屏幕并在其上移动时,系统持续的发送这些触摸事件对象给应用程序。在触摸序列中,事件为所有触摸提供了快照,最重要的触摸为新收到的或在特定视图中改变的。多触摸序列从第一个手指触摸到屏幕开始。其它的手指可能接下来再触摸屏幕并且所有在屏幕上的手指进行移动,序列当最后一个手指离开屏幕时结束。

触摸,用UITouch对象来表示,包括触摸阶段和触摸位置。触摸阶段,指示什么时候触摸开始,是否移动和什么时候触摸结束——即何时最后一根手指离开屏幕。

触摸位置表示与触摸相关联的对象即触摸点在对象的内部。当手指触摸到屏幕,触摸就与窗口和视图相关联,关联关系一直维持到事件结束。如果多点触摸同时到达,当它们所关联的视图相同时则进行统一处理。否则,如果两个触摸在同一个视图上以很快的速度先后到达,则被认为是多次点击。触摸对象保存触摸的位置及上次触摸位置(如果存在)在它所对应的窗口或视图中。

一个事件对象包括了在本次触摸序列中所有的触摸对象并能提供触摸对象所操作的窗口或视图(如图2-2)。所改变的触摸属性为触摸阶段,在视图中的位置,上一次的位置以及触摸时间戳。事件处理代码计算这些属性以决定如何对其进行响应。

因为系统可以在任何时候取消多点触摸序列,所以应用应能对其进行相应的处理。取消会发生在有系统消息到达的时候,例如一个来电或短消息。

事件处理方法

大多数应用程序可以在自定义视图上检测并处理其感兴趣的手势。这些手势包括点击(单击或多击),pinch(放大或缩小视图),滑动,拖动一个视图或用两个手指来旋转一个视图。

你可以定义触摸事件处理代码来识别并处理这些手势,但这样的代码将十分的复杂,可能会有很多bug且会耗费大量时间。替代方法是在IOS3.2以后,你可以使用手势识别器类来定义和处理这些通用的手势。要使用手势识别器类,首先进行初始化,将其与要接收触摸的视图联系,对其进行配置,并分配该手势的处理对象及处理方法。当一个手势识别器识别到一个手势时,它将发送处理方法给处理对象来对手势进行响应。

你可以通过继承UIGestureRecognizer类来定义自己的手势识别器类。自定义的手势识别器需要你对一个多触摸序列中的触摸流进行分析来识别特定的手势。

控制触摸事件投递

UIKit提供给应用程序事件处理编程接口或可以完全关闭UIEvent对象流,下面的则描述了操作方法。

关闭事件投递。缺省情况下,视图接收触摸事件,但你可以设置视图的userInteractionEnable属性为NO来关闭对触摸事件的投递,一个视图在隐藏或透明状态下也无法接收到触摸事件。

在一段时间内关闭事件投递。应用程序可以调用UIApplication的beginIgnoringInteraction

Events方法并在以后的某个时间调用endIgnoringInteractionEvents方法。第一方法使application对象完成停止对触摸事件的接收,第二个方法则是恢复application对象对触摸事件的接收。你可能在应用中运行动画时关闭对事件的投递。

打开多触摸事件投递。缺省情况下,视图只会对触摸序列中的第一个触摸进行响应并忽略其它触摸。如果你需要处理多触摸则必需打开该视图的多触摸处理能力。你可以通过编程设置multipleTouchEnable属性为YES或者通过Interface Builder中设置勾选相关属性。

限制触摸事件给特定视图。缺省情况下,视图的exclusiveTouch属性设置为NO,表示该视图并不限制当前窗口中的其它视图接收触摸事件。如果你设置其值为YES,则标识了该视图并只有该视图能对消息进行跟踪处理。窗口中的其它视图则无法收到触摸事件。

限制触摸事件给子视图。一个从UIView继承的自定义视图,可以重载

hitTest:withEvent方法来限制将多触摸事件传递给其子视图。

处理多触摸事件

要处理多触摸事件,你首先必须创建一个响应者的子类。该类可以从以下的任一个进行继承:

一个自定义视图(UIView的子类)

一个UIViewController类的子类或从UIKit中其子控制器类继承

一个UIkit中View或控制类的子类,像UIImageView或UISlider

一个UIApplication或UIWindow的子类(不常用)

一个视图控制器一般通过响应者链来接收事件,触摸事件一开始便发送给它对应的视图如果该视图没有重载事件处理方法。

如果要自定义的子类实例能接收触摸事件,你必须为触摸事件的处理申明一个或多个UIResponser方法,方法描述见下。除此之外,对应的视图应可见(不是透明或隐藏)并且userInteractionEnabled应为YES(缺省值)。

接下来的章节描述事件处理方法,描述处理通用手势的方法,展示了一个用于处理复杂多触摸事件的响应者例子,讨论事件转发和事件处理所建议使用的技术。

事件处理方法

在一个多触摸序列中,应用程序分发一系列的事件消息给目的响应者。为了能接收并响应这些消息,响应者类必须至少申明一个由UIResponser类定义的如下方法,在一些情况下,则必须申明全部的方法。

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 应用程序在一个给定的触摸阶段当有新的触摸或改变的触摸时发送这些消息:当一根或多根手指触摸到屏幕时发送touchesBegan:withEvent:消息。

当一根或多根手指在屏幕上移动时发送touchesMoved:withEvent:消息。

当一根或多根手指离开屏幕时发送touchesEnded:withEvent:消息。

当触摸序列被一个系统事件(来电)打断时发送touchesCancelled:withEvent:消

息。

上述的每一个消息都与一个触摸阶段相关联,例如:touchesBegan:withEvent:消息与UITouchPhaseBegin相关联。你可以通过访问任何UITouch对象的phase属性获得该触摸所处的阶段。

每个调用事件处理方法的消息都包括两个参数。第一个参数是一组表示在给定触摸阶段新收到或改变了的UITouch对象。第二个参数则是表示触摸事件的UIEvent对象。从事件对象中你可能获得该事件的所有触摸对象或者是根据给定视图或窗口过滤了的触摸对象。其中的一些触摸对象表示该触摸自从上个事件来没有发生改变或该触摸在不同的触摸阶段发生了改变。

基本触摸事件处理

你通常会处理一个给定阶段的事件通过从传入的一系列UITouch中获得一个或多个UITouch对象,计算属性,获得位置并进行相应的处理。这些对象表示申明的处理方法中在一个给定阶段新收到或改变了的触摸。如果收到了任一个触摸对象,你可以向NSSet对象发送anyObject消息,该消息导致对应视图只接收触摸序列中的第一个触摸(multipleTouchesEnabled属性设置为NO)。

UITouch对象的一个重要方法为locationInView:,如果为该方法传递self参数,则表示该触摸的位置位于接收视图中的坐标。一个并行的方法告诉你该触摸上一次的位置(previousLocationInView:)。UITouch对象的tapCount属性告诉你本次触摸点击了多少次,timestamp属性告诉你本次触摸何时创建以及最后一次改变的时间,phase属性则告诉你本次触摸所处的阶段。

由于某些原因,你可能对本次触摸序列中那些自从上个阶段以来没有改变或处在不同阶段的同一触摸感兴趣,你可以从传入的UIEvent对象中获得它们。下图中展示了一个UIEvent对象中包括四个触摸对象。要获得所有的触摸对象,你可以调用事件对象的allTouches方法。

touchesForWindow:消息,如下图所示。

touchesForView:消息,如下图所示。

如果一个响应者在对事件序列中的事件进行处理时创建了持久化对象,则应该申明touchCancelled:withEvent:方法,并在该方法中对持久化对象进行释放。事件取消通常发生在外部事件——例如来电——打断了当前应用程序的事件处理。需要注意的是响应者对象也应该释放在touchEnded:withEvent:方法中进行释放的对象。

重要:如果自定义的响应者是UIView或UIViewController的子类,则你必须申明全部四个UIResponser对象的事件处理方法。如果自定义响应者为UIKit中的响应者类,则你不需要对全部四个事件处理方法进行申明。在那些重载的事件处理方法中,一定要调用其超类的事件处理方法([super touchBegan:touches withEvent:theEvent])。这样做的原因很简单:所有的视图都处理触摸,包括你自定义的,都希望收到完整的触摸事件流。如果你阻止一个UIKit响应者对象接收在给定阶段中的触摸事件,则接下来的行为将是未定义并不可预计。

点击手势处理

点击是在IOS应用中最常用的手势:用户通过手指点击屏幕上的对象。响应者对象可以对单击,双击以及三击进行不同的响应。要确定用户点击的次数,你可以调用UITouch对象的tapCount属性获得。

获得点击次数的最佳位置是在touchBegan:withEvent:和touchEnded:withEvent:方法中。而第二个方法则更为合适,因为它在用户手指从点击到离开屏幕的阶段中进行响应。通过在touch-up阶段计算点击次数,你可以确认手指是否真正的完成点击,或者只是手指按到屏幕上并进行移动。

下面的代码展示了如何在指定视图中对双击进行判断。

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

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

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

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

for (UITouch *touch in touches) {

if (touch.tapCount >= 2) {

[self.superview bringSubviewToFront:self];

}

}

}

如果响应者对象将对单击和双击操作进行不同的处理则会变得有点复杂。例如:单击操作为了选中对象而双击操作为了显示一个视图并对其进行编辑。应用程序应该如何判断单击并非是双击的第一部分呢?下面的代码示例了对消息处理方法的声明让进行双击操作时增加所点击视图的大小而单击操作时减少所点击视图的大小。

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

UITouch *touch = [touches anyObject];

if (2 == touch.tapCount) {

[NSObject cancelPreviousPerformRequestsWithTarget:self];

}

}

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

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

UITouch *touch = [touches anyObject];

if (1 == touch.tapCount) {

NSDictionary *touchLoc = [NSDictionary dictionaryWithObject:

[NSValue valueWithCGPoint:[touch locationInView:self]]

forKey:@"location"];

[self performSelector:@selector(handleSingleTap:) withObject:touchLoc afterDelay:0.3];

}

else if (2 == touch.tapCount) {

//double-tap: increase view size by 10%

CGRect viewFrame = self.frame;

viewFrame.size.width += self.frame.size.width * 0.1;

viewFrame.size.height += self.frame.size.height * 0.1;

viewFrame.origin.x -= (self.frame.origin.x * 0.1)/2.0;

viewFrame.origin.y -= (self.frame.origin.y * 0.1)/2.0;

[UIView beginAnimations:nil context:NULL];

[self setFrame:viewFrame];

[UIView commitAnimations];

}

}

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

- (void)handleSingleTap:(NSDictionary *)touches {

//Single-tap: decrease view size by 10%

CGRect viewFrame = self.frame;

viewFrame.size.width -= self.frame.size.width * 0.1;

viewFrame.size.height -= self.frame.size.height * 0.1;

viewFrame.origin.x += (self.frame.origin.x * 0.1)/2.0;

viewFrame.origin.y += (self.frame.origin.y * 0.1)/2.0;

[UIView beginAnimations:nil context:NULL];

[self setFrame:viewFrame];

[UIView commitAnimations];

}

以下是对上面代码的说明:

在touchEnded:withEvent:方法中,当点击的次数为1时,响应者对象向其自身发送performSelector:withObject:afterDelay:消息。选择子标识了对单击事件响应的方法;第二个参数是一个NSValue或NSDictionary对象,用来保存UITouch对象的一些状态;延迟时间是表示单击和双击之间有意义的时间间隔。

注:因为touch对象在触摸序列的处理中是可变的,所以你不能retain一个touch对象并假设它的状态不会发生改变(你也不能拷贝一个touch对象,因为其没有申明NSCopying协议)。但如果你需要保存touch对象的某些状态,你需要将touch对象的状

态用NSVaule对象,字典对象或其它类似对象进行保存。

在touchBegan:withEvent:方法中,当点击的次数为2时,响应者对象通过调用NSObject类的cancelPerformRequestsWithTarget:方法取消被挂起的延迟调用。如果点击次数不为2,则在延迟时间到达后,将会调用选择子所指定的单击事件处理方法。

在touchEnded:withEvent:方法中,当点击的次数为2时,响应者对双击的操作进行处理。

处理滑动或拖动手势

水平或垂直方面的滑动属于简单的手势,你可以在你的代码中进行跟踪并对其进行处理。要检测一个滑动手势,你必须跟踪与所希望的移动轴相反的用户手指的移动,但是滑动的组成最终还是由你来决定。换句话说,你需要确定用户手指是否移动的足够远,是否以直线方式向前移动,是否移动的足够快。要对上述的内容进行判断,你要存储下初始时的触摸位置,然后与touch-moved事件中位置进行比较。

下面的代码示例了一些基本的跟踪方法用于判断视图上进行水平方向的滑动。在这个例子中首先将触摸的初始位置存储到startTouchPosition实例变量中。当用户移动手指,代码对当前的触摸位置与初始触摸位置进行比较来确定是否为滑动操作。如果手指在垂直方向上移动了太多的距离,则不认为是一次滑动而进行不同的处理。一旦滑动足够远并被认为是一个完整的手势时会调用相应的操作。要在垂直方向上判断滑动操作,你也可以使用类似的代码,只不过对对X和Y方向进行交换。

#define HORIZ_SWIPE_DRAG_MIN 12

#define VERT_SWIPE_DRAG_MIN 4

#pragma mark event handle

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

UITouch *touch = [touches anyObject];

startTouchPosition = [touch locationInView:self];

}

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

UITouch *touch = [touches anyObject];

CGPoint currentTouchPosition = [touch locationInView:self];

if ((fabs(startTouchPosition.x - currentTouchPosition.x) >=

HORIZ_SWIPE_DRAG_MIN) &&

(fabs(startTouchPosition.y - currentTouchPosition.y) <=

VERT_SWIPE_DRAG_MIN)) {

if (startTouchPosition.x < currentTouchPosition.x) {

NSLog(@"swipe to right");

}

else {

NSLog(@"swipe to left");

}

}

}

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

startTouchPosition = CGPointZero;

}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { startTouchPosition = CGPointZero;

}

下面的代码是一个更简单的单触摸事件的跟踪,这次则是用来对拖动进行处理。在本次处理中只有touchesMoved:withEvent:方法有实现代码,在实现代码中对本次位置和上次位置取差值。然后使用差值来重新设置视图的位置。

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

}

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

UITouch *touch = [touches anyObject];

CGPoint currentTouchPosition = [touch locationInView:self];

CGPoint prevTouchPosition = [touch previousLocationInView:self];

CGRect viewFrame = self.frame;

float deltaX = currentTouchPosition.x - prevTouchPosition.x;

float deltaY = currentTouchPosition.y - prevTouchPosition.y;

viewFrame.origin.x += deltaX;

viewFrame.origin.y += deltaY;

[self setFrame:viewFrame];

}

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

}

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

}

处理复杂的多点触摸序列

点击,拖动和滑动只是简单的手势,通常只涉及一次触摸。要对两个或两个以上的触摸事件进行处理则更为复杂。你可能要跟踪在整个触摸阶段的所有触摸,记录被更改的触摸属性以及更改内部状态为合适值。为了能对多触摸事件进行跟踪和处理还需要做如下的事情:设置视图的multipleTouchEnabled属性为YES

使用Core Foundation的字典对象(CFDictionaryRef)在事件过程的各阶段中跟踪触摸的改变

当处理一个多触摸事件时,你经常会存储每个触摸的最初状态以用于以后的比较。作为例子,你将对每个触摸的最后位置与初始位置进行比较。在touchesBegan:withEvent:方法中,你将从locationInView:方法加获得每个触摸的初始位置并将这些位置以UITouch对象的地址作为键值存储到CFDictionaryRef对象中。在touchesEnded:withEvent:方法中,你将从字典对象中取出初始位置值并与当前位置值进行比较(你应该使用CFDictionaryRef对象而非NSDictionary对象,后一个对象对键值进行拷贝操作,但UITouch对象并没有申明用于对象拷贝的NSCopying协议)。

下面的代码示例了使用Core Foundation字典对象对初始位置进行存储。

- (void)cacheBeginPointForTouches: (NSSet *)touches {

if ([touches count] > 0) {

for (UITouch *touch in touches) {

CGPoint *point = (CGPoint *)CFDictionaryGetValue(touchBeginPoints, touch);

if (NULL == point) {

point = (CGPoint *)malloc(sizeof(CGPoint));

CFDictionarySetValue(touchBeginPoints, touch, point);

}

*point = [touch locationInView:self.superview];

}

}

}

下面的代码示例了如何从字典对象中取得初始位置数据并获得对应触摸的当前位置。

- (void)comparePointForTouches: (NSSet *)touches {

NSArray *sortedTouch = [[touches allObjects]

sortedArrayUsingSelector:@selector(compareAddress:)];

UITouch *touch1 = [sortedTouch objectAtIndex:0];

UITouch *touch2 = [sortedTouch objectAtIndex:1];

CGPoint beginPoint1 = *((CGPoint*)CFDictionaryGetValue(touchBeginPoints, touch1));

CGPoint currentPoint1 = [touch1 locationInView:self.superview];

CGPoint beginPoint2 = *((CGPoint*)CFDictionaryGetValue(touchBeginPoints, touch2));

CGPoint currentPoint2 = [touch2 locationInView:self.superview];

//Compare current and begin point

}

更具体的操作可参考apple提供的MoveMe示例。

Hit-Testing

你自己定义的响应者可以使用hit-testing来找到要对与触摸对应的该响应者中的子视图或子层(subLayer)并对其进行合适的处理。要完成该操作可以调用视图的

hitTest:withEvent:方法或子层的hitTest:方法或者直接重载其中任一方法。响应者有时会在

事件转发之前对hitTest进行处理。

如果传入hitTest:withEvent:或hitTest:方法的触摸点位置在包括此方法的视图范围之内,则会被忽略。也就是说子视图在其父视图的范围之外则不会收到触摸事件。

如果你自定的视图有子视图,你必须决定是否在子视图层或父视图层对触摸进行处理。如果子视图没有声明touchesBegan:withEvent:,touchesMoved:withEvent:或touchesEnded:withEvent:方法对触摸进行处理,则相关的事件会传递给它的父视图。对于多次点击或多点触摸都是与首个触摸子视图相联系,所以父视图是不会收到触摸消息的。要确认能收到所有的触摸消息,父视图要重载hitTest:withEvent:方法并返回其自身对象而不是其子视图。

下面的代码示例用于检测位于自定义视图层上的“info”图片何时被点击

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

CGPoint location = [[touches anyObject] locationInView:self];

CALayer *hitLayer = [[self layer] hitTest:[self convertPoint:location fromView:nil]];

if (hitLayer) {

[self displayInfo];

}

}

下面的代码,一个响应者类(在本例中为UIWindow的子类)重载了hitTest:withEvent:方法。首先返回父类的hit-test视图,如果该视图是其本身,则返回其最后一个子视图。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

UIView *hitView = [super hitTest:point withEvent:event];

if (hitView == self) {

return [[self subviews] lastObject];

}

else {

return hitView;

}

}

转发触摸事件

事件转发是用于一些应用程序的一种技术。你通过调用另一个响应者对象的事件处理方

法将触摸事件进行转发。尽管这是个很有效率的方法,但在使用过程中还有很多需要注意的地方。UIKit Framework中的类并不是设计用于接收不在其范围内的触摸事件,从编程的角度来看,也就是UITouch对象的view属性必须持有一个对framework对象的引用以用来对触摸事件进行处理。如果你想在你的应用程序中有选择的将触摸事件传递给其它响应者,用于接收的响应者必须是你自己定义的UIView的子类。

例如:一个应用程序有三个自定义的子视图:A,B和C。当用户点击了视图A,应用程序的窗口对象确定所点击的视图是个hit-test视图并向其发送初始触摸事件。根据一定的条件,视图A将事件转发给视图B或C。在这种情况下,视图A,B和C必须注意要使事件能进行转发,视图B和C要能对不在其范围内的触摸进行处理。

事件转发经常需要分析触摸对象用来确定向何处转发事件。有些方法可以用来进行这样的分析:

对于一个视图,使用hit-testing对事件进行分析在将其转发到子视图之前

在UIWindow的自定义子类中重载sendEvent:方法,对触摸进行分析并将其转发给合适的响应者。如果重载了该方法,你就必须调用父类的sendEvent:方法

设计你的应用其中并不需要对触摸进行分析

下面的代码示例了第二种方法,自定义一个UIWindow的子类并对sendEvent:方法进行重载。本例中,子类对象将触摸事件转发给一个自定义的”helper”响应者,在该响应者中对相应的视图进行affine变换。

- (void)sendEvent:(UIEvent *)event

{

for (TransformGesture *gesture in transformGestures) {

// collect all the touches we care about from the event

NSSet *touches = [gesture observedTouchesForEvent:event];

NSMutableSet *began = nil;

NSMutableSet *moved = nil;

NSMutableSet *ended = nil;

NSMutableSet *cancelled = nil;

// sort the touches by phase so we can handle them similarly to normal event dispatch

for(UITouch *touch in touches) {

switch ([touch phase]) {

case UITouchPhaseBegan:

if (!began)

began = [NSMutableSet set];

[began addObject:touch];

break;

case UITouchPhaseMoved:

if (!moved)

moved = [NSMutableSet set];

[moved addObject:touch];

break;

case UITouchPhaseEnded:

if (!ended)

ended = [NSMutableSet set];

[ended addObject:touch];

break;

case UITouchPhaseCancelled:

if (!cancelled)

cancelled = [NSMutableSet set];

[cancelled addObject:touch];

break;

default:

break;

}

}

// call our methods to handle the touches

if (began)

[gesture touchesBegan:began withEvent:event];

if (moved)

[gesture touchesMoved:moved withEvent:event];

if (ended)

[gesture touchesEnded:ended withEvent:event];

if (cancelled)

[gesture touchesCancelled:cancelled withEvent:event];

触摸屏的种类及工作原理

触摸屏种类及原理 随着多媒体信息查询的与日俱增,人们越来越多地谈到触摸屏,因为触摸屏不仅适用于中国多媒体信息查询的国情,而且触摸屏具有坚固耐用、反应速度快、节省空间、易于交流等许多优点。利用这种技术,我们用户只要用手指轻轻地碰计算机显示屏上的图符或文字就能实现对主机操作,从而使人机交互更为直截了当,这种技术大大方便了那些不懂电脑操作的用户。 触摸屏作为一种最新的电脑输入设备,它是目前最简单、方便、自然的一种人机交互方式。它赋予了多媒体以崭新的面貌,是极富吸引力的全新多媒体交互设备。触摸屏在我国的应用范围非常广阔,主要是公共信息的查询;如电信局、税务局、银行、电力等部门的业务查询;城市街头的信息查询;此外应用于领导办公、工业控制、军事指挥、电子游戏、点歌点菜、多媒体教学、房地产预售等。将来,触摸屏还要走入家庭。 随着使用电脑作为信息来源的与日俱增,触摸屏以其易于使用、坚固耐用、反应速度快、节省空间等优点,使得系统设计师们越来越多的感到使用触摸屏的确具有具有相当大的优越性。触摸屏出现在中国市场上至今只有短短的几年时间,这个新的多媒体设备还没有为许多人接触和了解,包括一些正打算使用触摸屏的系统设计师,还都把触摸屏当作可有可无的设备,从发达国家触摸屏的普及历程和我国多媒体信息业正处在的阶段来看,这种观念还具有一定的普遍性。事实上,触摸屏是一个使多媒体信息或控制改头换面的设备,它赋予多媒体系统以崭新的面貌,是极富吸引力的全新多媒体交互设备。发达国家的系统设计师们和我国率先使用触摸屏的系统设计师们已经清楚的知道,触摸屏对于各种应用领域的电脑已经不再是可有可无的东西,而是必不可少的设备。它极大的简化了计算机的使用,即使是对计算机一无所知的人,也照样能够信手拈来,使计算机展现出更大的魅力。解决了公共信息市场上计算机所无法解决的问题。 随着城市向信息化方向发展和电脑网络在国民生活中的渗透,信息查询都已用触摸屏实现--显示内容可触摸的形式出现。为了帮助大家对触摸屏有一个大概的了解,笔者就在这里提供一些有关触摸屏的相关知识,希望这些内容能对大家有所用处。 一、触摸屏的工作原理 为了操作上的方便,人们用触摸屏来代替鼠标或键盘。工作时,我们必须首先用手指或其它物体触摸安装在显示器前端的触摸屏,然后系统根据手指触摸的图标或菜单位置来定位选择信息输入。触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU发来的命令并加以执行。 二、触摸屏的主要类型

触摸屏的工作原理及常见问题解析

一、什么是触摸屏 所谓触摸屏,从市场概念来讲,就是一种人人都会使用的计算机输入设备,或者说是人人都会使用的与计算机沟通的设备。不用学习,人人都会使用,是触摸屏最大的魔力,这一点无论是键盘还是鼠标,都无法与其相比。 从技术原理角度讲,触摸屏是一套透明的绝对寻址系统,首先它必须保证是透明的,因此它必须通过材料科技来解决透明问题,像数字化仪、写字板、电梯开关,它们都不是触摸屏;其次它是绝对坐标,手指摸哪就是哪,不需要第二个动作,不像鼠标,是相对定位的一套系统,我们可以注意到,触摸屏软件都不需要游标,有游标反倒影响用户的注意力,因为游标是给相对定位的设备用的,相对定位的设备要移动到一个地方首先要知道现在在何处,往哪个方向去,每时每刻还需要不停的给用户反馈当前的位置才不致于出现偏差。这些对采取绝对坐标定位的触摸屏来说都不需要;再其次就是能检测手指的触摸动作并且判断手指位置,各类触摸屏技术就是围绕“检测手指触摸”而八仙过海各显神通的。 二、触摸屏的工作原理 触摸屏做为一种特殊的计算机外设,它是目前最简单、方便、自然的一种人机交互方式。它赋予了多媒体以崭新的面貌,是极富吸引力的全新多媒体交互设备。触摸屏在我国的应用范围非常广阔,主要是公共信息的查询;如电信局、税务局、银行、电力等部门的业务查询;城市街头的信息查询;此外应用于领导办公、工业控制、军事指挥、电子游戏、点歌点菜、多媒体教学、房地产预售等。尤其是公共场合信息查询服务,它的使用与推广大大方便了人们查阅和获取各种信息。可你对触摸屏了解多少呢? 触摸屏的基本原理是,用手指或其他物体触摸安装在显示器前端的触摸屏时,所触摸的位置(以坐标形式)由触摸屏控制器检测,并通过接口(如RS-232串行口)送到CPU,从而确定输入的信息。

喷码机触摸屏的工作原理与应用

喷码机触摸屏的工作原理与应用 一、触摸屏的工作原理为了操作上的方便,人们用触摸屏来代替鼠标或键盘。工作时,我们必须首先用手指或其它物体触摸安装在显示器前端的触摸屏,然后系统根据手指触摸的图标或菜单位置来定位选择信息输入。触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU 发来的命令并加以执行。二、触摸屏的主要类型从技术原理来区别触摸屏,可分为五个基本种类:矢量压力传感技术触摸屏、电阻技术触摸屏、电容技术触摸屏、红外线技术触摸屏、表面声波技术触摸屏。其中矢量压力传感技术触摸屏已退出历史舞台。触摸屏红外屏价格低廉,但其外框易碎,容易产生光干扰,曲面情况下失真;电容屏设计理论好,但其图象失真问题很难得到根本解决;电阻屏的定位准确,但其价格颇高,且怕刮易损。表面声波触摸屏解决了以往触摸屏的各种缺陷,清晰抗暴,适于各种场合,缺憾是屏表面的水滴、尘土会使触摸屏变的迟钝,甚至不工作。按照触摸屏的工作原理和传输信息的介质,我们把触摸屏分为四种,它们分别为电阻式、红外线式、电容感应式以及表面声波式,下面笔者就对上述的各种类型的触摸屏进行简要介绍: 1、电阻式触摸屏电阻触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层(OTI,氧化铟),上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层OTI,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。当手指接触屏幕,两层OTI 导电层出现一个接触点,因其中一面导电层接通Y轴方向的5V 均匀电压场,使得侦测层的电压由零变为非零,控制器侦测到这个接通后,进行A/D 转换,并将得到的电压值与5V 相比,即可得触摸点的Y 轴坐标,同理得出X 轴的坐标,这就是电阻技术触摸屏共同的最基本原理。电阻屏根据引出线数多少,分为四线、五线等多线电阻触摸屏。五线电阻触摸屏的A面是导电玻璃而不是导电涂覆层,导电玻璃的工艺使其的寿命得到极大的提高,并且可以提高透光率。 电阻式触摸屏的OTI 涂层比较薄且容易脆断,涂得太厚又会降低透光且形成内反射降低清晰度,OTI 外虽多加了一层薄塑料保护层,但依然容易被锐利物件所破坏;且由于经常被触动,表层OTI 使用一定时间后会出现细小裂纹,甚至变型,如其中一点的外层OTI 受破坏而断裂,便失去作为导电体的作用,触摸屏的寿命并不长久。但电阻式触摸屏不受尘埃、水、污物影响。这种触摸屏利用压力感应进行控制。它用两层高透明的导电层组成触摸屏,两层之间距离仅为2.5 微米。当手指按在触摸屏上时,该处两层导电层接触,电阻发生变化,在X 和Y 两个方向上产生信号,然后送触摸屏控制器。这种触摸屏能在恶劣环境下工作,但手感和透光性较差,适合配带手套和不能用手直接触控的场合。电阻类触摸屏的关键在于材料科技,常用的透明导电涂层材料有:A、ITO,氧化铟,弱导电体,特性是当厚度降到1800 个(埃=10-10 米)以下时会突然变得透明,透光率为80%,再薄下去透光率反而下降,到300 埃厚度时又上升到80%。ITO 是所有电阻技术触摸屏及电容技术触摸屏都用到的主要材料,实际上电阻和电容技术触摸屏的工作面就是ITO 涂层。B、镍金涂层,五线电阻触摸屏的外层导电层使用的是延展性好的镍金涂层材料,外导电层由于频繁触摸,使用延展性好的镍金材料目的是为了延长使用寿命,但是工艺成本较为高昂。镍金导电层虽然延展性好,但是只能作透明导体,不适合作为电阻触摸屏的工作面,因为它导电率高,而且金属不易做到厚度非常均匀,不宜作电压分布层,只能作为探层。 2、电容式触摸屏电容式触摸屏的构造主要是在玻璃屏幕上镀一层透明的薄膜体层,再在导体层外加上一块保护玻璃,双玻璃设计能彻底保护导体层及感应器。电容式触摸屏在

触摸屏原理及应用实例

触摸屏原理及应用实例 一、触摸屏的结构及工作原理 触摸屏从工作原理上可以分为电阻式、电容式、红外线式、矢量压力传感器式等,以四线电阻式触摸屏为例。 1、触摸屏的结构 典型触摸屏的工作部分一般由三部分组成,如下图所示:两层透明的阻性导体层、两层导体之间的隔离层、电极。阻性导体层选用阻性材料,如铟锡氧化物(ITO)涂在衬底上构成,上层衬底用塑料,下层衬底用玻璃。隔离层为粘性绝缘液体材料,如聚脂薄膜。电极选用导电性能极好的材料(如银粉墨)构成,其导电性能大约为ITO(一种N型氧化物半导体氧化铟锡,ITO薄膜即铟锡氧化物半导体透明导电膜,通常有两个重要的性能指标:电阻率和光透过率)的1000倍。 触摸屏结构触摸屏工作时,上下导体层相当于电阻网络,如下图所示。 2、触摸屏的测量过程工作原理

电阻式触摸屏有四线和五线两种,四线最具有代表性。 在外ITO 层的上、下两边各渡一个狭长电极,引出端为Y +、Y -,在内IT0层的左、右两边分别渡上狭长电极,引出端为X +、X -。为了获得触摸点在X 方向的位置信号,在内IT0层的两电极X +,X -上别加REF V ,0 V 电压,使内IT0层上形成了从了从0-REF V 的电压梯度,触摸点至X -端的电压为该两端电阻对REF V 的分压,分压值代表了触摸点在X 方向的位置,然后将外lT0层的一个电极(如Y -)端悬空,可从另一电极(Y +)取出这一分压,将该分压进行A/D 转换,并与REF V 进行比较,便可得到触摸点的X 坐标。 为了获得触摸点在y 方向的位置信号,需要在外ITO 层的两电极Y +,Y -上分别加REF V ,0 V 电压,将内lT0层的一个电极(X -)悬空,从另一电极上取出触摸点在y 方向的分压。 四线电阻触摸屏测量原理 测量电压与测量点关系等效电路 测量触摸点P处测量结果计算如下:212CC y V V R R R = ?+4 34 CC x V V R R R =?+

触摸屏在S3C2410上的应用实例

触摸屏在S3C2410上的应用实例 [日期:2005-2-27] 来源:单片机及嵌入式系统应用作者:国防科技大学宋 成孙广富 [字体:大中小] 摘要:给出S3C2410上触摸屏的实现原理、硬件结构和软件程序;对软件进行优化,改进软件滤波的实现方法。其算法使用C语言实现,可移植到任何操作系统的触摸屏驱动程序中。 关键词:触摸屏S3C2410 滤波 引言 随着个人数字助理(PDA)、瘦容户机等的普及,触摸屏作为终端与用户交互的媒介,在我们的生活中使用得越来普遍。触摸屏分为电阻式、电容式、声表面波式和红外线扫描式等类型,使用得最多的是4线电阻式触摸屏。 本文以三星公司ARM9内核芯片S3C2410触摸屏接口为基础,通过外接4线电阻式触摸屏构成硬件基础。在此基础上,开发了触摸屏面图板程序。 1 触摸屏原理 S3C2410接4线电阻式触摸屏的电路原理如图1所示。整个触摸屏由模向电阻比和纵向电阻线组成,由nYPON、YMON、nXPON、XMON四个控制信号控制4个MOS管(S1、S2、S3、S4)的通断。S3C2410有8个模拟输入通道。其中,通道7作为触摸屏接口的X坐标输入(图1的AIN[7]),通道5作为触摸屏接口的Y坐标输入(图1的AIN[5])。电路如图2所示。在接入S3C2410触摸屏接口前,它们都通过一个阻容式低通滤器滤除坐标信号噪声。这里的滤波十分重要,如果传递给S3C2410模拟输入接口的信号中干扰过大,不利于后续的软件处理。在采样过程中,软件只用给特殊寄存器置位,S3C2410的触摸屏控制器就会自动控制触摸屏接口打开或关闭各MOS管,按顺序完成X坐标点采集和Y坐标点采集。

触摸屏工作原理

0 引言 随着信息技术的飞速发展,人们对电子产品智能化、便捷化、人性化要求也不断提高,触摸屏作为一种人性化的输入输出设备,在我国的应用范围非常广阔,是极富吸引力的多媒体交互没备。目前,触摸屏的需求动力主要来自于消费电子产品,如手机、PDA、便携导航设备等。随着触摸屏技术的不断发展,它在其他电子产品中的应用也会得到不断延伸。现在市面上已有的触摸屏控制器普遍价格比较高且性能相对比较固定,一些场合下无法满足用户的实际需求。本文基于上述考虑,根据电阻式触摸屏的工作原理,选用51系列单片机作为控制核心,设计一种实用且低成本的触摸屏控制系统。 1 触摸屏的工作原理 触摸屏由触摸检测部件和触摸屏控制器件组成(如图1所示);触摸检测部件用于检测用户触摸位置,接收后送触摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息送给控制器,它同时能接收控制器发来的命令并加以执行。

触摸屏的主要3大种类是:电阻技术触摸屏、表面声波技术触摸屏、电容技术触摸屏。其中,电阻式触摸屏凭借低廉的价格以及对于手指及输入笔触摸的良好响应性,涵盖了100多家触摸屏元件制造商中的2/3,成为过去5年中销售量最高的触摸屏产品。在这里根据要设计应用的触摸屏控制器,重点介绍一下四线电阻式触摸屏。 电阻触摸屏的屏体部分是一块与显示器表面相匹配的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。当手指触

摸屏幕时,平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层接通Y轴方向的5 V均匀电压场,使得侦测层的电压由零变为非零,这种接通状态被控制器侦测到后,进行A/D转换,并将得到的电压值与5 V相比即可得到触摸点的Y轴坐标,同理得出X轴的坐标,这就是四线电阻式触摸屏基本原理,其原理如图2所示。 2 触摸屏控制系统硬件设计 根据四线电阻式触摸屏的工作原理可以看出,在硬件设计上的主要工作就在于将触摸点所在的X轴及Y轴坐标通过控制驱动模块加以精确识别。 2.1 总体结构设计 触摸屏控制器的设计关键在于对驱动模块的控制,本文采用AT89C2051作为驱动电路的控制核心,通过ADS7843模块接收触摸屏上得到的信号并控制驱动电

触摸屏的原理与应用

触摸屏的原理与应用触摸屏又称为“触控屏”、“触控面板”,是一种可接收触头等输入讯号的感应式液晶显示装置,当接触了屏幕上的图形按钮时,屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置,可用以取代机械式的按钮面板,并借由液晶显示画面制造出生动的影音效果。 触摸屏原理:主要由其二大特性决定。第一:绝对坐标系统,第二:传感器。 首先先来区别下,鼠标与触摸屏的工作原理有何区别?借此来认识绝对坐标系统和相对坐标系统的区别。 鼠标的工作原理是通过检测鼠标器的位移,将位移信号转换为电脉冲信号,再通过程序的处理和转换来控制屏幕上的鼠标箭头的移动,属于相对坐标定位系统。而绝对坐标系统要选哪就直接点那,与鼠标这类相对定位系统的本质区别是一次到位的直观性。绝对坐标系的特点是每一次定位坐标与上一次定位坐标没有关系,触摸屏在物理上是一套独立的坐标定位系统,每次触摸的数据通过校准数据转为屏幕上的坐标。 第二:定位传感器 检测触摸并定位,各种触摸屏技术都是依靠各自的传感器来工作的,甚至有的触摸屏本身就是一套传感器。各自的定位原理和各自所用的传感器决定了触摸屏的反应速度、可靠 性、稳定性和寿命。 通过以上两个特性,触摸屏工作时,首先用手指或其它物体触摸安装

在显示器前端的触摸屏,然后系统根据手指触摸的图标或菜单位置(即绝对坐标系统)来定位选择信息输入。触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器(即传感器);而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU它同时能接收CPU发来的命令并加以执行。触摸屏传感器技术从触摸屏传感器技术原理来划分:有可分为五个基本种类:矢量压力传感技术触摸屏、电阻技术触摸屏、电容技术触摸屏、红外线技术触摸屏、表面声波技术触摸屏。 其中矢量压力传感技术触摸屏已退出历史舞台;红外线技术触摸屏价格低廉,但其外框易碎,容易产生光干扰,曲面情况下失真;电容技术触摸屏设计构思合理,但其图像失真问题很难得到根本解决;电阻技术触摸屏的定位准确,但其价格颇高,且怕刮易损;表面声波触摸屏解决了以往触摸屏的各种缺陷,清晰不容易被损坏,适于各种场合,缺点是屏幕表面如果有水滴和尘土会使触摸屏变的迟钝,甚至不工作。按照触摸屏的工作原理和传输信息的介质,把触摸屏分为四种,它们分别为电阻式、电容感应式、红外线式以及表面声波式。每一类触摸屏都有其各自的优缺点,要了解哪种触摸屏适用于哪种场合,关键就在于要懂得每一类触摸屏技术的工作原理和特点。 下面对上述的各种类型的触摸屏进行简要介绍一下: 1、表面声波屏 声波屏的三个角分别粘贴着X,Y 方向的发射和接收声波的换能器(换

触摸屏原理

触摸屏原理及技术发展简介 董炜 2010.10.08 随着多媒体信息查询的与日俱增,人们越来越多地谈到触摸屏,因为触摸屏作为一种最新的电脑输入设备,它是目前最简单、方便、自然的而且又适用于中国多媒体信息查询国情的输入设备,触摸屏具有坚固耐用、反应速度快、节省空间、易于交流等许多优点。利用这种技术,我们用户只要用手指轻轻地指碰计算机显示屏上的图符或文字就能实现对主机操作,从而使人机交互更为直截了当,这种技术极大方便了那些不懂电脑操作的用户。这种人机交互方式。它赋予了多媒体以崭新的面貌,是极富吸引力的全新多媒体交互设备。触摸屏在我国的应用范围非常广阔,主要有公共信息的查询,如电信局、税务局、银行、电力等部门的业务查询;城市街头的信息查询;此外还可广泛应用于领导办公、工业控制、军事指挥、电子游戏、点歌点菜、多媒体教学、房地产预售等,将来,触摸屏还要走入家庭。随着城市向信息化方向发展和电脑网络在日常生活中的渗透,信息查询都会以触摸屏——显示内容可触摸的形式出现。 工作原理及基本技术: 一:触摸屏的工作理 为了操作上的方便,人们用触摸屏来代替鼠标或键盘。工作时,我们必须首 先用手指或其它物体触摸安装在显示器前端的触摸屏,然后系统根据手指触摸的 图标或菜单位置来定位选择信息输入。触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触 摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息, 并将它转换成触点坐标,再送给CPU,它同时能接收CPU发来的命令并加以执行。二:触摸屏的技术原理 从技术原理来区别触摸屏,可分为五个基本种类: 1.矢量压力传感技术触摸屏、 2.电阻技术触摸屏、

触摸屏的原理与应用

触摸屏的原理与应用 触摸屏又称为“触控屏”、“触控面板”,是一种可接收触头等输入讯号的感应式液晶显示装置,当接触了屏幕上的图形按钮时,屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置,可用以取代机械式的按钮面板,并借由液晶显示画面制造出生动的影音效果。 触摸屏原理:主要由其二大特性决定。第一:绝对坐标系统,第二:传感器。 首先先来区别下,鼠标与触摸屏的工作原理有何区别?借此来认识绝对坐标系统和相对坐标系统的区别。 鼠标的工作原理是通过检测鼠标器的位移,将位移信号转换为电脉冲信号,再通过程序的处理和转换来控制屏幕上的鼠标箭头的移动,属于相对坐标定位系统。而绝对坐标系统要选哪就直接点那,与鼠标这类相对定位系统的本质区别是一次到位的直观性。绝对坐标系的特点是每一次定位坐标与上一次定位坐标没有关系,触摸屏在物理上是一套独立的坐标定位系统,每次触摸的数据通过校准数据转为屏幕上的坐标。 第二:定位传感器 检测触摸并定位,各种触摸屏技术都是依靠各自的传感器来工作的,甚至有的触摸屏本身就是一套传感器。各自的定位原理和各自所用的传感器决定了触摸屏的反应速度、可靠

性、稳定性和寿命。 通过以上两个特性,触摸屏工作时,首先用手指或其它物体触摸安装在显示器前端的触摸屏,然后系统根据手指触摸的图标或菜单位置(即绝对坐标系统)来定位选择信息输入。触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器(即传感器);而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU发来的命令并加以执行。触摸屏传感器技术 从触摸屏传感器技术原理来划分:有可分为五个基本种类:矢量压力传感技术触摸屏、电阻技术触摸屏、电容技术触摸屏、红外线技术触摸屏、表面声波技术触摸屏。 其中矢量压力传感技术触摸屏已退出历史舞台;红外线技术触摸屏价格低廉,但其外框易碎,容易产生光干扰,曲面情况下失真;电容技术触摸屏设计构思合理,但其图像失真问题很难得到根本解决;电阻技术触摸屏的定位准确,但其价格颇高,且怕刮易损;表面声波触摸屏解决了以往触摸屏的各种缺陷,清晰不容易被损坏,适于各种场合,缺点是屏幕表面如果有水滴和尘土会使触摸屏变的迟钝,甚至不工作。按照触摸屏的工作原理和传输信息的介质,把触摸屏分为四种,它们分别为电阻式、电容感应式、红外线式以及表面声

ITO触摸屏原理及基础知识

ITO触摸屏原理及基础知识 2008-08-01 22:41 目前主要有几种类型的触摸屏,它们分别是:电阻式(双层),表面电容式和感应电容式,表面声波式,红外式,以及弯曲波式、有源数字转换器式和光学成像式。它们又可以分为两类,一类需要ITO,比如前三种触摸屏,另一类的结构中不需要ITO, 比如后几种屏。 触摸屏在我们身边已经随处可见了,在PDA等个人便携式设备领域中,触摸屏节省了空间便于携带,还有更好的人机交互性。 目前主要有几种类型的触摸屏,它们分别是:电阻式(双层),表面电容式和感应电容式,表面声波式,红外式,以及弯曲波式、有源数字转换器式和光学成像式。它们又可以分为两类,一类需要ITO,比如前三种触摸屏,另一类的结构中不需要ITO, 比如后几种屏。目前市场上,使用ITO材料的电阻式触摸屏和电容式触摸屏应用最为广泛。 电阻式触摸屏 ITO 是铟锡氧化物的英文缩写,它是一种透明的导电体。通过调整铟和锡的比例,沉积方法,氧化程度以及晶粒的大小可以调整这种物质的性能。薄的ITO材料透明性好,但是阻抗高;厚的ITO材料阻抗低,但是透明性会变差。在PET聚脂薄膜上沉积时,反应温度要下降到150度以下,这会导致ITO氧化不完全,之后的应用中ITO会暴露在空气或空气隔层里,它单位面积阻抗因为自氧化而随时间变化。这使得电阻式触摸屏需要经常校正。 图一是电阻触摸屏的一个侧面剖视图。手指触摸的表面是一个硬涂层,用以保护下面的PET层。PET层是很薄的有弹性的PET薄膜,当表面被触摸时它会向下弯曲,并使得下面的两层ITO涂层能够相互接触并在该点连通电路。两个ITO层之间是约千分之一英寸厚的一些隔离支点使两层分开。最下面是一个透明的硬底层用来支撑上面的结构,通常是玻璃或者塑料。

触摸屏的基本原理及控制实现方式

触摸屏的基本原理及控制实现方式 https://www.sodocs.net/doc/2717310770.html,来源:投影时代更新日期:2011-01-24 作者:佚名 2012数字告示市场谁主天下 NEC工程液晶显示器应用方案交流会 共图大业海信商用显示全面招商 1、触摸屏的基本原理 典型触摸屏的工作部分一般由三部分组成,如图1所示:两层透明的阻性导体层、两层导体之间的隔离层、电极。阻性导体层选用阻性材料,如铟锡氧化物(ITO)涂在衬底上构成,上层衬底用塑料,下层衬底用玻璃。隔离层为粘性绝缘液体材料,如聚脂薄膜。电极选用导电性能极好的材料(如银粉墨)构成,其导电性能大约为ITO的1000倍。

触摸屏工作时,上下导体层相当于电阻网络,如图2所示。当某一层电极加上电压时,会在该网络上形成电压梯度。如有外力使得上下两层在某一点接触,则在电极未加电压的另一层可以测得接触点处的电压,从而知道接触点处的坐标。比如,在顶层的电极(X+,X-)上加上电压,则在顶层导体层上形成电压梯度,当有外力使得上下两层在某一点接触,在底层就可以测得接触点处的电压,再根据该电压与电极(X+)之间的距离关系,知道该处的X坐标。然后,将电压切换到底层电极(Y+,Y-)上,并在顶层测量接触点处的电压,从而知道Y坐标。 2 、触摸屏的控制实现

现在很多PDA应用中,将触摸屏作为一个输入设备,对触摸屏的控制也有专门的芯片。很显然,触摸屏的控制芯片要完成两件事情:其一,是完成电极电压的切换;其二,是采集接触点处的电压值(即A/D)。本文以BB (Burr-Brown)公司生产的芯片ADS7843为例,介绍触摸屏控制的实现。 2.1 ADS7843的基本特性与典型应用 ADS7843是一个内置12位模数转换、低导通电阻模拟开关的串行接口芯片。供电电压2.7~5 V,参考电压VREF为1 V~+VCC,转换电压的输入范围为0~ VREF,最高转换速率为125 kHz。ADS7843的引脚配置如图3所示。表1为引脚功能说明,图4为典型应用。

触摸屏种类与工作原理

触摸屏种类与工作原理 触摸屏的基本原理是,用手指或其他物体触摸安装在显示器前端的触控屏时,所触摸的位置(以坐标形式)由触摸屏控制器检测,并通过接口(如RS-232串行口) 送到CPU,从而确定输入的信息。 触摸屏系统一般包括触摸屏控制器(卡)和触摸检测装置两个部分。其中,触控屏控制器(卡)的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU发来的命令并加以执行:触摸检测装置一般安装在显示器的前端,主要作用是检测用户的触摸位置,并传送给触控屏 控制卡。 1.电阻触摸屏(电阻式触摸屏工作原理图) 电阻触摸屏的屏体部分是一块与显示器表面相匹配的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小 (小于千分之一英寸)的透明隔离点把它们隔开绝缘。 当手指触摸屏幕时,平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层接通Y轴方向的5V均匀电压场,使得侦测层的电压由零变为非零,这种接通状态被控制器侦测到后,进行A/D转换,并将得到的电压值与5V相比即可得到触摸点的Y轴坐标,同理得出X轴的坐标,这就是所有电阻技术触摸屏共同的最基本原理。电阻类触摸屏的关键在于材料科技。电阻屏根据引出线数多少,分为四线、五线、六线等多线电阻触摸屏。电阻式触摸屏在强化玻璃表面分别涂上两层OTI透明氧化金属导电层,最外面的一层OTI涂层作为导电体,第二层OTI则经过精密的网络附上横竖两个方向的+5V至0V的电压场,两层OTI之间以细小的透明隔离点隔开。当手指接触屏幕时,两层OTI导电层就会出现一个接触点,电脑同时检测电压及电流,计算出触摸的位置,反应速度为 10-20ms。 五线电阻触摸屏的外层导电层使用的是延展性好的镍金涂层材料,外导电层由于频繁触摸,使用延展性好的镍金材料目的是为了延长使用寿命,但是工艺成本较为高昂。镍金导电层虽然延展性好,但是只能作透明导体,不适合作为电阻触控屏的工作面,因为它导电率高,而且金属不易做到厚度非常均匀,不宜作电

浅谈触摸屏的工作原理及典型应用

毕业设计(论文) 论文题目:浅谈触摸屏的工作原理及典型应用 教学中心:电子科技大学网络教育重庆学习中心 指导老师:田丰职称:讲师 学生姓名:李鹏学号: V09642742125 专业:机械电子工程 2011年05月15日

毕业设计(论文)任务书 题目:浅谈触摸屏的工作原理及典型应用 任务与要求: 了解触摸屏的基本结构及工作原理。要求写作内容鲜明,严格围绕题目述写,逻辑性思维要强,内容理论联系实际,涉及他人观点,对本设计有全面的论证。设计原理、计算、电路和本产品设计独特的优势,要有个全面阐述清楚。格式要严格按照学校规定排序。如有不熟悉的知识点,向指导老师请教。 时间:2011 年2月25 日至2011年 5 月15 日共10 周 办学单位:电子科技大学网络教育重庆学习中心 学生姓名:李鹏学号:V09642742125 专业:机械电子工程 指导单位或教研室:重庆科创职业学院 指导教师:田丰职称:讲师 2011年2月25日

毕业设计(论文)进度计划表

电子科技大学毕业设计(论文)中期检查记录表

摘要 随着多媒体信息查询的与日俱增,人们越来越多地谈到触摸屏,因为触摸屏作为一种最新的电脑输入设备,它是目前最简单、方便、自然的而且又适用于中国多媒体信息查询国情的输入设备,触摸屏具有坚固耐用、反应速度快、节省空间、易于交流等许多优点。利用这种技术,我们用户只要用手指轻轻地指碰计算机显示屏上的图符或文字就能实现对主机操作,从而使人机交互更为直截了当,这种技术极大方便了那些不懂电脑操作的用户。这种人机交互方式。它赋予了多媒体以崭新的面貌,是极富吸引力的全新多媒体交互设备。触摸屏在我国的应用范围非常广阔,主要有公共信息的查询,如电信局、税务局、银行、电力等部门的业务查询;城市街头的信息查询;此外还可广泛应用于领导办公、工业控制、军事指挥、电子游戏、点歌点菜、多媒体教学、房地产预售等,将来,触摸屏还要走入家庭。随着城市向信息化方向发展和电脑网络在日常生活中的渗透,信息查询都会以触摸屏——显示内容可触摸的形式出现。本文提供一些有关触摸屏的相关基础技术知识,希望这些内容能对广大用户有所用处。 关键词:触摸屏嵌入式系统ADS7843

触摸屏原理及基础知识全解析

目前主要有几种类型的触摸屏,它们分别是:电阻式(双层),表面电容式和感应电容式,表面声波式,红外式,以及弯曲波式、有源数字转换器式和光学成像式。它们又可以分为两类,一类需要ITO,比如前三种触摸屏,另一类的结构中不需要ITO, 比如后几种屏。 触摸屏在我们身边已经随处可见了,在PDA等个人便携式设备领域中,触摸屏节省了空间便于携带,还有更好的人机交互性。 目前主要有几种类型的触摸屏,它们分别是:电阻式(双层),表面电容式和感应电容式,表面声波式,红外式,以及弯曲波式、有源数字转换器式和光学成像式。它们又可以分为两类,一类需要ITO,比如前三种触摸屏,另一类的结构中不需要ITO, 比如后几种屏。目前市场上,使用ITO材料的电阻式触摸屏和电容式触摸屏应用最为广泛。 电阻式触摸屏 ITO 是铟锡氧化物的英文缩写,它是一种透明的导电体。通过调整铟和锡的比例,沉积方法,氧化程度以及晶粒的大小可以调整这种物质的性能。薄的ITO材料透明性好,但是阻抗高;厚的ITO材料阻抗低,但是透明性会变差。在PET聚脂薄膜上沉积时,反应温度要下降到150度以下,这会导致ITO氧化不完全,之后的应用中ITO会暴露在空气或空气隔层里,它单位面积阻抗因为自氧化而随时间变化。这使得电阻式触摸屏需要经常校正。

图一是电阻触摸屏的一个侧面剖视图。手指触摸的表面是一个硬涂层,用以保护下面的PET层。PET层是很薄的有弹性的PET薄膜,当表面被触摸时它会向下弯曲,并使得下面的两层ITO涂层能够相互接触并在该点连通电路。两个ITO层之间是约千分之一英寸厚的一些隔离支点使两层分开。最下面是一个透明的硬底层用来支撑上面的结构,通常是玻璃或者塑料。 电阻触摸屏的多层结构会导致很大的光损失,对于手持设备通常需要加大背光源来弥补透光性不好的问题,但这样也会增加电池的消耗。电阻式触摸屏的优点是它的屏和控制系统都比较便宜,反应灵敏度也很好。电容式触摸屏 电容式触摸屏也需要使用ITO材料,而且它的功耗低寿命长,但是较高的成本使它之前不太受关注。Apple推出的iPhone提供的友好人机界面,流畅操作性能使电容式触摸屏受到了市场的追捧,各种电容式触摸屏产品纷纷面世。而且随着工艺进步和批量化,它的成本不断下降,开始显现逐步取代电阻式触摸屏的趋势。

触摸屏基本原理及其与单片机的连接

龙源期刊网 https://www.sodocs.net/doc/2717310770.html, 触摸屏基本原理及其与单片机的连接 作者:张佳根 来源:《硅谷》2012年第05期 摘要:简要介绍触摸屏的结构和原理,并以TI公司触摸屏控制芯片ADS7843为例,介绍触摸屏的控制电路,讨论该控制芯片的应用方法和技巧。对单片机的触控系统的的开发和设计有指导作用。 关键词:触摸屏;ADS7843;单片机系统 中图分类号:TP393 文献标识码:A 文章编号:1671-7597(2012)0310044-01 触摸屏作为一种新型的计算机外设,提供了简单,方便,自然的交互方式。它赋予计算机崭新的面貌。触摸屏的应用十分广泛,主要应用于商场,营业厅,pad设备,手机等的信息输入和查询。此外,在工业控制,军事指挥,游戏控制等领域也有较多的应用。本文主要介绍ADS7843芯片的工作特点,及运用其特点使其和单片机结合以为触摸屏工作做硬件支持。 1 触摸屏的结构和工作机理 触摸屏分为电阻式,电容式,表面声波式,红外线扫描近场成像等几大类。由于电阻式价格较为廉价,较大面积的被广泛应用。 电阻式触摸屏是由多层材料组成的,它由有机玻璃作为基本层,上面涂覆了一层电导体,在基本层的上面覆盖一层塑料层,塑料层的内表面涂覆一层电导层,在两个电导层之间有许多的隔离点将两个层隔离。这种隔离层的特点是精度高,不受环境干扰,适用于较为广泛的场合。当手触摸屏幕时,平常绝缘的导电层之间就有了接触,控制器检测到这个接触时,其中一个导电层接通y轴方向5v均匀电压场,另一导电层将接触点的电压输送至控制器进行A\D转换,在将得到的电压值与5v相比即得到接触点的y轴坐标,同理的出x轴坐标。 2 触控控制芯片的功能特性 触控控制芯片的功能主要有两个方面:一方面是完成电极电压的切换;另一方面是采集接触点的电压,即(A\D)转换。Ads7843是TI公司专门为四线电阻式触摸屏设计的专用接口芯片。它可方便的与单片机接口,对转换信号进行处理和计算。它的具体参数是,拥有8位或12位的分辨率,逐次逼近型的A\D转换器,带有一串型接口,可达125khz的转换速率,工作电压是2.7-5v,参考电压是1v-Vcc均可。最高功耗是750μW,最低功耗是0.5μW。它采用ssop-16封装,工作温度是-40℃~+85℃。各个引脚的功能如下:

触摸屏及应用

第六章触摸屏及应用 触摸屏全称叫做触摸式图形显示终端,是一种人机交互装置,故又称人机界面。触摸屏是在显示器屏幕上加了一层具有检测功能的透明薄膜,使用者只要用手指轻轻地碰触摸屏上的图符或文字,就能实现对主机操作和信息显示,人机交互更为简捷方便。 6、1触摸屏的作用与功能 触摸屏一般通过串行接口与个人电脑、PLC以及其他外部设备连接通讯、传输数据信息,由专用软件完成画面制作和传输,实现其作为图形操作和显示终端的功能。在控制系统中,触摸屏常作为PLC输入和输出设备,通过使用相关软件设计适合用户要求的控制画面,实现对控制对象的操作和显示。 目前市场触摸屏的种较多,如三菱公司的GOT系列、松下公司生产的GT系列、OMRON公司NT系列等。它们的原理和使用方法大同小异,这里以三菱公司生产的F940GOT-SWD/LWD-C/E型为例(以下简称GOT),介绍其应用方法。另外,文中提到的DU(Digital Unit)泛指数字单元装置,也包括GOT. 6.1.1各部分名称及功能 图6-1所示为F940 GOT触摸屏外形。 图6-1 触摸屏外形 触摸屏正面板如图6-1a)所示,①为触摸显示屏幕,由320-240像素组成,可显示字符串:20字×15行/全角,字符种类包括英文字母、数字、符号、汉字等。 触摸屏背面板如图6-1b)和 6-1c)所示,②为GOT电源和接地配线端子。 ③为PM-20BL型电池,用于保存采样数据、报警记录及当前时间,画面数据保存,内置闪存时不需要电池。④为扩展接口,用于同F940GOT-40UMB型数据传送适配器连接,将画面数据保存在EPROM中。⑤为RS232C连接器,用于同PLC或微型计算机的RS-232口连接传送数据,也用于多个GOT单元连接或同条形阅读器、打印机的通信。⑥是RS422连接器,用于PLC连接或多个GOT单元连接。 6.1.2F940GOT触摸屏与外围单元的连接 1、触摸屏电源连接

相关主题