iOS手勢操作簡介(一)

iOS中能夠響應手勢操作的類必須要繼承自UIResponder,才能夠處理手勢響應操作。
默認繼承了UIResponder的類有:UIApplication UIViewController UIView都繼承自UIResponder.
UIView是UIResponder的子類,可以實現下列4個方法處理不同的觸摸事件
**

一根或者多根手指開始觸摸view,系統會自動調用view的下面方法

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

一根或者多根手指在view上移動,系統會自動調用view的下面方法(隨著手指的移動,會持續調用該方法)
- (void)touchesMoved:(NSSet )touches withEvent:(UIEvent )event

一根或者多根手指離開view,系統會自動調用view的下面方法
- (void)touchesEnded:(NSSet )touches withEvent:(UIEvent )event

觸摸結束前,某個系統事件(例如電話呼入)會打斷觸摸過程,系統會自動調用view的下面方法
(void)touchesCancelled:(NSSet )touches withEvent:(UIEvent )event
提示:touches中存放的都是UITouch對象

UITouch對象:

當用戶用一根手指觸摸屏幕時,會創建一個與手指相關聯的UITouch對象

一根手指對應一個UITouch對象

UITouch的作用
保存著跟手指相關的信息,比如觸摸的位置、時間、階段

當手指移動時,系統會更新同一個UITouch對象,使之能夠一直保存該手指的觸摸位置。

當手指離開屏幕時,系統會銷毀相應的UITouch對象

提示:iPhone開發中,要避免使用雙擊事件!

UITouch的屬性

觸摸產生時所處的窗口
@property(nonatomic,readonly,retain) UIWindow *window;

觸摸產生時所處的視圖
@property(nonatomic,readonly,retain) UIView *view;

短時間內點按屏幕的次數,可以根據tapCount判斷單擊、雙擊或更多的點擊
@property(nonatomic,readonly) NSUInteger tapCount;

記錄了觸摸事件產生或變化時的時間,單位是秒
@property(nonatomic,readonly) NSTimeInterval timestamp;

當前觸摸事件所處的狀態
@property(nonatomic,readonly) UITouchPhase phase;

UITouch的方法:

(CGPoint)locationInView:(UIView *)view;
返回值表示觸摸在view上的位置
這里返回的位置是針對view的坐標系的(以view的左上角為原點(0, 0))
調用時傳入的view參數為nil的話,返回的是觸摸點在UIWindow的位置

  • (CGPoint)previousLocationInView:(UIView *)view;
    該方法記錄了前一個觸摸點的位置

UIEvent 每產生一個事件,就會產生一個UIEvent對象 UIEvent:稱為事件對象,記錄事件產生的時刻和類型

常見屬性
事件類型
@property(nonatomic,readonly) UIEventType type;
@property(nonatomic,readonly) UIEventSubtype subtype;

事件產生的時間
@property(nonatomic,readonly) NSTimeInterval timestamp;

UIEvent還提供了相應的方法可以獲得在某個view上面的觸摸對象(UITouch)

一次完整的觸摸過程,會經歷3個狀態:
觸摸開始:- (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

4個觸摸事件處理方法中,都有NSSet *touches和UIEvent *event兩個參數
一次完整的觸摸過程中,只會產生一個事件對象,4個觸摸方法都是同一個event參數

如果兩根手指同時觸摸一個view,那么view只會調用一次touchesBegan:withEvent:方法,touches參數中裝著2個UITouch對象

如果這兩根手指一前一后分開觸摸同一個view,那么view會分別調用2次touchesBegan:withEvent:方法,并且每次調用時的touches參數中只包含一個UITouch對象

根據touches中UITouch的個數可以判斷出是單點觸摸還是多點觸摸

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247116.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247116.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247116.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS開發中手勢處理簡介(二)

iOS中手勢操作事件的產生于傳遞 發生觸摸事件后,系統會將該事件加入到一個由UIApplication管理的事件隊列中 UIApplication會從事件隊列中取出最前面的事件,并將事件分發下去以便處理,通常,先發送事件給應用程序的主窗口&#x…

對前端Jenkins自動化部署的研究

1. 安裝 安裝 Nginx 1.1去官網下直接下載,解壓縮 start nginx就可以使了,常用命令: start nginx # 啟動 nginx -s reload # 修改配置后重新加載生效 nginx -s reopen # 重新打開日志文件 nginx -t # 配置文件檢測是否正確 1.2 安裝Jenkins…

python超神之路:Python3 列表list合并的4種方法

Python3 列表list合并的4種方法 方法1: 直接使用""號合并列表 aList [1,2,3] bList [www, pythontab.com] cList aList bList dList bList aList print(cList) print(dList) # 結果: [1, 2, 3, www, pythontab.com] [www, pythontab.com, 1, 2, 3] …

iOS手勢操作簡介(三)

監聽觸摸事件的做法 如果想監聽一個view上面的觸摸事件,之前的做法是 自定義一個view 實現view的touches方法,在方法內部實現具體處理代碼 通過touches方法監聽view觸摸事件,有很明顯的幾個缺點 必須得自定義view 由于是在view內部的to…

iOS手勢操作簡介(四)

當事件傳遞到相應的UIResponder后,會首先調用: hitTest:withEvent: return (UIView *) UIApplication -> UIWindow 什么時候調用:當事件傳遞給一個控件的時候就會調用 作用:找最合適的viewhitTest:withEvent: return (UIView…

ASP.NET Core Web 應用程序系列(二)- 在ASP.NET Core中使用Autofac替換自帶DI進行批量依賴注入(MVC當中應用)...

在上一章中主要和大家分享在MVC當中如何使用ASP.NET Core內置的DI進行批量依賴注入,本章將繼續和大家分享在ASP.NET Core中如何使用Autofac替換自帶DI進行批量依賴注入。 PS:本章將主要采用構造函數注入的方式,下一章將繼續分享如何使之能夠同…

iOS手勢操作簡介(五)

利用手勢操作實現抽屜效果: 第一步:搭建UI (void)addChildView { // left UIView *leftView [[UIView alloc] initWithFrame:self.view.bounds]; leftView.backgroundColor [UIColor greenColor]; [self.view addSubview:leftView]; _leftView…

Java過濾器與SpringMVC攔截器之間的關系與區別

今天學習和認識了一下,過濾器和SpringMVC的攔截器的區別,學到了不少的東西,以前一直以為攔截器就是過濾器實現的,現在想想還真是一種錯誤啊,而且看的比較粗淺,沒有一個全局而又細致的認識,由于已…

iOS手勢操作簡介(六)

利用UIGestureRecognizer來對手勢進行處理: interface HMViewController () property (weak, nonatomic) IBOutlet UIImageView *imagView; end implementation HMViewController (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup aft…

iOS并行程序開發- GCD NSOperationQueue(1)

import UIKit let imageURLs [“http://www.planetware.com/photos-large/F/france-paris-eiffel-tower.jpg“, “http://adriatic-lines.com/wp-content/uploads/2015/04/canal-of-Venice.jpg“, “http://algoos.com/wp-content/uploads/2015/08/ireland-02.jpg“, “http:…

二次冪權限設計

設置含有的權限如增刪改查減為1,2,4,8,16 如果A包含增刪改這5個權限,那A的值為1247 如果B包含增改查這5個權限,那A的值為14813 如果C包含增刪改查減這5個權限,那A的值為12481631 7二進制為111,13的二進制為1101,31二進制為11111 1二進制為1&a…

最好用的koa2+mysql的RESTful API腳手架,mvc架構,支持node調試,pm2部署。

#基于webpack構建的 Koa2 restful API 服務器腳手架這是一個基于 Koa2 的輕量級 RESTful API Server 腳手架,支持 ES6, 支持使用TypeScript編寫。GIT地址:https://github.com/Allenzihan/koa2-mysql-framework.git此腳手架只安裝了一些配合koa2使用的必要…

使用putty在linux主機和windows主機之間拷貝文件(已測試可執行)

轉載于,請點擊 首先下載putty,putty下載地址zip, 解壓zip發現里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可執行文件,如果只是想要鏈接主機做一些操作那么使用putty.exe,要想要上傳 …

博客園在升級的路上,不妨更自信些,同時說說我們可以為博客園做些什么

最近,博客園在技術升級上做了積極向上的努力,雖然中間過程出現反復,但姑且先不論最終升級后客戶體驗方面的提升,在升級過程中探索排查問題和解決問題的過程,本身就能幫助博客園團隊和廣大用戶積累經驗和提升能力&#…

iOS中持久化存儲SQLite(一)

在iOS中做持久化存儲有多種方案,其中包括plist, preference, sqlite, core data,其中: (1)plist, preference適合小型數據存儲,因為每次存儲前都必須將文件內容讀到內存中,因此如果數據量過大就會占用大量…

多進程相關內容

多進程相關內容 multiprocessing模塊與process類 multiprocessing python中的多線程無法利用多核優勢,如果想要充分地使用多核CPU的資源(os.cpu_count()查看),在python中大部分情況需要使用多進程。Python提供了multiprocessing。…

iOS中SQLite持久化存儲第三方庫FMDB

interface HMShopTool : NSObject (NSArray *)shops; (void)addShop:(HMShop *)shop; end implementation HMShopTool static FMDatabase *_db; (void)initialize { // 1.打開數據庫 NSString *path [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, N…

python超神之路:python異常對照表

python異常對照表 異常名稱描述BaseException所有異常的基類SystemExit解釋器請求退出KeyboardInterrupt用戶中斷執行(通常是輸入^C)Exception常規錯誤的基類StopIteration迭代器沒有更多的值GeneratorExit生成器(generator)發生異常來通知退出StandardError所有的內建標準異常…

python超神之路:創建對象的9種方法

python生成對象的9種方法 class Point:def __init__(self,x,y):self.x xself.y y import sys import copy import typespoint1 Point(1,2) point2 eval("{}({},{})".format("Point",1,2)) point3 globals()[Point](1,2) point4 locals()["Point…

面向接口的編程

面向接口的編程,將接口與實現分離,可以極大的降低代碼的耦合,比如在編程中使用的加密接口,如果將具體的加密算法寫入到使用加密的地方,這樣就會導致,下一次加密方法發生改變的時候會導致大量的地方需要修改…