久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios触摸超出_iOS触摸事件处理

發(fā)布時間:2024/1/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios触摸超出_iOS触摸事件处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在開發(fā)過程中,大家或多或少的都會碰到令人頭疼的手勢沖突問題,正好前兩天碰到一個類似的bug,于是借著這個機會了解了iOS中的事件傳遞與處理的相關(guān)內(nèi)容,整理出來方便以后查閱。

iPhone的成功,很大的一部分在于用戶可以以多種方式操縱他們的設(shè)備。大體上iOS的事件分為三類:觸摸事件(手勢操作),運動事件(搖一搖),遠(yuǎn)程控制事件(耳機線控),本文主要整理的是觸摸事件,對其它兩種就不多做介紹了,感興趣的同學(xué)可以自己查閱資料。

事件的生命周期

從手指觸摸屏幕,觸摸事件的傳遞大概經(jīng)歷了3個階段,系統(tǒng)響應(yīng)階段-->SpringBoard.app處理階段-->前臺App處理階段,大致的流程如下圖:

uitouchflow.png

起始階段

cpu處于睡眠階段,等待事件發(fā)生

手指觸摸屏幕

系統(tǒng)響應(yīng)階段

屏幕感應(yīng)到觸摸事件,并將感應(yīng)到的事件傳遞給IOKit(用來操作硬件和驅(qū)動的框架,這是一個私有API,知道這個是干嘛的就行了)

IOKit.framework封裝整個觸摸事件為IOHIDEvent對象,直接通過mach port(Mach屬于硬件層,僅提供了諸如處理器調(diào)度、IPC進程通信等非常少量的基礎(chǔ)服務(wù)。在Mach中,所有的東西都是通過自己的對象實現(xiàn)的,進程、線程和虛擬內(nèi)存都被稱為“對象”,Mach的對象間不能直接調(diào)用,只能通過消息傳遞的方式實現(xiàn)對象間的通信。消息是Mach中最基礎(chǔ)的概念,消息在兩個端口(port)之間傳遞。mach port就是IPC進程間通信的核心,更多內(nèi)容請查看這篇文章)轉(zhuǎn)發(fā)給SpringBoard.app。

SpringBoard.app處理階段

SpringBoard.app的主線程Runloop收到IOKit.framework轉(zhuǎn)發(fā)來的消息蘇醒,并觸發(fā)對應(yīng)mach port的Source1回調(diào)__IOHIDEventSystemClientQueueCallback()。

如果SpringBoard.app監(jiān)測到有App在前臺(記為xxx.app),SpringBoard.app再通過mach port轉(zhuǎn)發(fā)給xxx.app,如果SpringBoard.app監(jiān)測到前臺沒有App運行,則SpringBoard.app進入App內(nèi)部響應(yīng)階段,觸發(fā)自身主線程runloop的Source0時間源的回調(diào)。

SpringBoard.app是一個系統(tǒng)進程,可以理解為桌面系統(tǒng),可以統(tǒng)一管理和分發(fā)系統(tǒng)接收到的觸摸事件。

App內(nèi)部響應(yīng)階段

前臺App主線程Runloop收到SpringBoard.app轉(zhuǎn)發(fā)來的消息而蘇醒,并觸發(fā)對應(yīng)mach port的Source1回調(diào)__IOHIDEventSystemClientQueueCallback()。

Source1回調(diào)內(nèi)部,觸發(fā)Source0回調(diào)__UIApplicationHandleEventQueue()

Source0回調(diào)內(nèi)部,封裝IOHIDEvent為UIEvent。

Source0回調(diào)內(nèi)部,調(diào)用UIApplication的sendEvent:方法,將UIEvent傳給UIWindow,接下來就是尋找最佳響應(yīng)者的過程,也就是命中測試hit-testing。

尋找到最佳響應(yīng)者后,接下來就是事件在響應(yīng)鏈中的傳遞和響應(yīng)了。需要注意的是,事件除了可以被響應(yīng)者處理之外,還有可能被手勢識別器或者target-action捕捉并處理,這涉及到一個優(yōu)先級的問題。如果觸摸事件在響應(yīng)鏈中沒有找到能夠響應(yīng)該事件的對象,最終將被釋放。

事件被處理或者釋放之后,runloop如果沒有其他事件進行處理,將會再次進入休眠狀態(tài)。

Source0和Source1都可用于線程(或進程)交互,但交互的形式有所不同,Source1監(jiān)聽端口,當(dāng)端口有消息到達(dá)時,響應(yīng)的Source1就會被觸發(fā)回調(diào),完成響應(yīng)的操作;而Source0并不監(jiān)聽端口,讓Source0執(zhí)行回調(diào)需要手動標(biāo)記Source0為待處理狀態(tài),還需要呼醒Source0所在的Runloop。從Source1和Source0的交互方式了解到,Source1的交互會主動呼醒所在的Runloop,而Source0的交互則需要依賴其他線程來呼醒Source0所在的Runloop。一次Runloop只能執(zhí)行一個Source1的回調(diào),但可以執(zhí)行多個待處理的Source0的回調(diào)。

尋找事件的最佳響應(yīng)者(Hit-Testing)

能夠響應(yīng)觸摸事件的例如UIView,UIButton,UIViewController,UIApplication,Appdelegate等都繼承自UIResponder類,一個頁面上通常會有許許多多個這種類型的對象,都可以對點擊事件作出響應(yīng)。為了避免沖突,這就需要有一個先后順序,也就是響應(yīng)的優(yōu)先級。Hit-Testing的目的就是找到具有最高優(yōu)先級的響應(yīng)對象。

尋找的具體流程如下:

UIApplication首先將事件隊列中的事件取出,傳遞給窗口對象。如果有多個窗口,則優(yōu)先詢問windows數(shù)組的最后一個窗口。

如果窗口不能響應(yīng)事件,則將事件傳遞給倒數(shù)第二個窗口,以此類推。如果窗口能夠響應(yīng)事件,則再依次詢問該窗口的子視圖。

重復(fù)步驟2。

若視圖的所有子視圖均不是最佳響應(yīng)者,則自身就是最合適的響應(yīng)者。

另外需要注意的是,一下幾種狀態(tài)的視圖無法響應(yīng)事件:

不允許交互的視圖:userInteractionEnabled = NO

隱藏的視圖:hidden = YES

透明度alpha<0.01的視圖

怎么樣驗證一下上面所說的Hit-Testing的順序呢,看一下UIView的API,里面會有一個hitTest:withEvent:方法,這個方法的主要作用就是查詢并返回事件在當(dāng)前視圖中的響應(yīng)者,每個被詢問到的視圖對象都會調(diào)用這個方法來返回當(dāng)前視圖層的響應(yīng)者。

如果當(dāng)前視圖無法響應(yīng)事件,則返回nil。

如果當(dāng)前視圖可以響應(yīng)事件,但子視圖不能響應(yīng)事件,則返回自身作為當(dāng)前視圖的響應(yīng)者。

如果當(dāng)前視圖可以響應(yīng)事件,同時有子視圖可以響應(yīng)事件,則返回該子視圖作為當(dāng)前視圖的響應(yīng)者。

所以我們可以根據(jù)通過觀察該方法的調(diào)用順序,來確定Hit-Testing的順序。

屏幕快照 2017-11-27 下午2.32.23.png

如圖所示,A視圖上面添加了子視圖B和C,B上面添加了子視圖D,C上面添加了子視圖E和F。創(chuàng)建一個繼承自UIView的類HTView,重寫hitTest:withEvent:方法:

@interface HTView : UIView

@property (nonatomic, strong) NSString *name; //視圖的名字

@end

@implementation HTView

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

{

NSLog(@"進入%@視圖-%s", self.name, __func__);

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

NSLog(@"離開%@視圖-%s", self.name, __func__);

[圖片上傳中...(屏幕快照 2017-11-27 下午3.58.14.png-334090-1511769555186-0)]

return view;

}

@end

在ViewController中添加如下代碼:

#import "ViewController.h"

#import "HTView.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet HTView *aView;

@property (weak, nonatomic) IBOutlet HTView *bView;

@property (weak, nonatomic) IBOutlet HTView *cView;

@property (weak, nonatomic) IBOutlet HTView *dView;

@property (weak, nonatomic) IBOutlet HTView *eView;

@property (weak, nonatomic) IBOutlet HTView *fView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.aView.name = @"A";

self.bView.name = @"B";

self.cView.name = @"C";

self.dView.name = @"D";

self.eView.name = @"E";

self.fView.name = @"F";

}

@end

點擊E視圖,打印的結(jié)果如下:

屏幕快照 2017-11-27 下午4.16.08.png

由打印的結(jié)果可知:

事件首先傳遞給視圖A。

A判斷自身能響應(yīng)事件,繼續(xù)從后向前遍歷A的子視圖,因為C比B后添加,因此首先傳遞給C。

C判斷自身能響應(yīng)事件,繼續(xù)從后向前遍歷C的子視圖,因為F比E后添加,因此首先傳遞給F。

F判斷自身不能響應(yīng)事件,C又將事件傳遞給E。

E判斷自身能響應(yīng)事件,同時E已經(jīng)沒有子視圖,因此最終E就是最佳響應(yīng)者。

(這里有一個問題,為什么遍歷視圖的時候需要從后往前遍歷呢?為什么B和C都是A的子視圖,判斷出了C視圖能響應(yīng)事件之后,B視圖沒有繼續(xù)調(diào)用hitTest:withEvent:方法呢?)

那么視圖又是怎么判斷自身是否可以響應(yīng)事件的呢?答案是通過poingInside:withEvent這個方法來判斷觸摸點是否在視圖的坐標(biāo)范圍內(nèi)。那么結(jié)合上面的hitTest調(diào)用的相關(guān)知識來看,hitTest:withEvent方法的大概實現(xiàn)已經(jīng)呼之欲出了:

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

{

// 先判斷視圖是否處于不能響應(yīng)事件的3種狀態(tài)

if (self.userInteractionEnabled == NO || self.hidden || self.alpha < 0.01) {

return nil;

}

// 判斷觸摸點是否在視圖的坐標(biāo)范圍內(nèi)

if ([self pointInside:point withEvent:event] == NO) {

return nil;

}

// 從后向前遍歷視圖的子視圖

for (int i = (int)self.subviews.count - 1; i >= 0; i--) {

UIView *subView = self.subviews[i];

// 坐標(biāo)轉(zhuǎn)換,把觸摸點的位置轉(zhuǎn)換為子視圖坐標(biāo)系下的坐標(biāo)

CGPoint subPoint = [self convertPoint:point toView:subView];

// 對子視圖進行Hit-Testing

UIView *subHTView = [subView hitTest:subPoint withEvent:event];

// 如果子視圖有最佳響應(yīng)者,返回該最佳響應(yīng)者視圖,結(jié)束循環(huán)

if (subHTView) {

return subHTView;

}

}

// 如果子視圖中沒有最佳響應(yīng)者,返回自己

return self;

}

重新點擊,發(fā)現(xiàn)視圖仍然可以正常響應(yīng)點擊事件,證明我們所寫的實現(xiàn)與系統(tǒng)的方法基本相同。這里我們就可以回答上面括號里面的問題了,為什么要從后往前遍歷呢?因為數(shù)組里面后面的視圖是后添加的,后添加的視圖一般都是在視圖的上層,會把先添加的視圖遮擋,我們自然不會想要去點擊被遮擋住的位置。為什么B視圖沒有調(diào)用hitTest:withEvent:方法呢?因為已經(jīng)確定觸摸點在C視圖上了。如果B和C沒有重疊部分,自然不用再判斷B視圖能否響應(yīng),如果有重疊部分,后添加的C自然是在上層,所以C優(yōu)先響應(yīng),也不會再對B視圖進行判斷。

我們通過這段代碼還可以解釋另外一種現(xiàn)象,子視圖超出了父視圖的范圍,點擊子視圖在父視圖之外的部分沒有反應(yīng)。這是因為在進行Hit-Testing的時候,父視圖就已經(jīng)判斷自己不能響應(yīng)事件了,自然不會再去詢問子視圖是否能夠響應(yīng)事件。

如果碰到這種需求怎么辦?比如說tabBar中間的按鈕凸起

FD64ADCA-17B2-496B-AC09-5A7AEEDFF183.png

這時候就需要重寫父視圖的pointInside:withEvent:方法了,在tabBar中判斷當(dāng)前觸摸位置是否在中間凸起的按鈕的坐標(biāo)范圍內(nèi),如果在,就返回YES。這樣得以讓觸摸事件傳遞到中間的按鈕上,并確定按鈕為最佳響應(yīng)者。代碼如下:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

{

//將觸摸點坐標(biāo)轉(zhuǎn)換到在circleButton上的坐標(biāo)

CGPoint subPoint = [self convertPoint:point toView:self.circleButton];

//若觸摸點circleButton上則返回YES

if ([self.circleButton pointInside:subPoint withEvent:event]) {

return YES;

}

//否則返回默認(rèn)的操作

return [super pointInside:point withEvent:event];

}

這里還有另一個問題,為什么Hit-Testing過程進行了兩次?

剛開始的猜想是兩次執(zhí)行時的參數(shù)event不一樣,點擊A視圖的父視圖,打印event對象:

1A71FACD-C456-4EA5-8290-FD9FA5805341.png

1A71FACD-C456-4EA5-8290-FD9FA5805341.png

從結(jié)果可以看到,兩次的event對象地址一樣,且allTouches集合里面沒有UITouch對象(看到有的簡友提到兩次調(diào)用的原因是UITouch對象的狀態(tài)不同,一次是begin,一次是end,這一點我持懷疑態(tài)度,因為沒法驗證。看上面提到的App響應(yīng)階段的操作,source0把IOHIDEvent對象封裝成了UIEvent對象,再結(jié)合這里hitTest:withEvent:方法里面沒有UITouch對象,然后我們還可以看一下touchesBegan方法里面是有touches對象的,我猜測UITouch對象是依據(jù)UIEvent對象的某些屬性生成的,這個過程發(fā)生在Hit-Testing過程之后。既然UITouch對象都沒有生成,那就更談不上UITouch狀態(tài)的變化了,當(dāng)然這里是我的臆想,希望有大神看到之后進行指正)。然后我在hitTest:withEvent:里面打了一個斷點,在event里面發(fā)現(xiàn)了這么一個東西:

20248863-DD94-418F-889F-1C94BABCF5F9.png

類型是_IOHIDEvent。這不就是最開始封裝成UIEvent那個類嗎,觸摸事件的相關(guān)信息應(yīng)該就儲存在這個成員變量里面。這是一個私有成員變量,直接取是取不出來的,不過這難不倒我們,我們有runtime可以取。在hitTest:withEvent:里面添加如下代碼:

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

{

Ivar ivar = class_getInstanceVariable([event class], "_hidEvent");

NSLog(@"%@", object_getIvar(event, ivar));

return [super hitTest:point withEvent:event];

}

點擊A視圖的父視圖(這里只會對A進行l(wèi)兩次hitTest,方便我們查看),第一次打印:

0B0483B1-E4A8-4EBB-859F-2A34159A7E4D.png

第二次打印:

7646AC0D-018F-4E5A-9D87-2F45ACE6F813.png

然后滿懷希望的一項一項比對里面的信息,貌似除了Total Latency(總延時)之外都是一樣的,而且這里面好多字段我也不知道什么意思,找了半天也沒有找到_IOHIDEvent的API(有這方面資料的同學(xué)請不吝賜教)。按照這種方式把event里面的成員變量一個個打印,大部分都是空數(shù)組或者空字典。看來這兩次hitTest:withEvent:的區(qū)別不在于參數(shù)上面。那么會不會在方法的調(diào)用順序上面有區(qū)別呢?依然是點擊A視圖的父視圖,看一下方法調(diào)用棧:

第一次調(diào)用棧

第二次調(diào)用棧

可以看到兩次調(diào)用的不同就在于紅框圈出來的部分。第一次有對UIWindow進行Hit-Testing,第二次沒有,而是直接對UIView進行了Hit-Testing。至于其中的原因,我也不知道。。。。。扯了那么多,也沒得出個結(jié)果,不要打我。

事件的響應(yīng)及在響應(yīng)鏈中的傳遞

經(jīng)歷Hit-Testing后,UIApplication已經(jīng)知道事件的最佳響應(yīng)者是誰了,接下來要做的兩件事情就是:

將事件傳遞給最佳響應(yīng)者響應(yīng)。

事件沿著響應(yīng)鏈傳遞,直到有UIResponder對象對此事件負(fù)責(zé)。

事件響應(yīng)的前奏

因為最佳響應(yīng)者具有最高的事件響應(yīng)優(yōu)先級,因此UIApplication會先將事件傳遞給它供其響應(yīng)。首先,UIApplication將事件通過sendEvent:傳遞給事件所屬的window,window同樣通過sendEvent:再將事件傳遞給最佳響應(yīng)者。在自定義的View里面重寫touchesBegan:方法,打上斷點,可以看到調(diào)用棧如下:

touchesBegan調(diào)用棧

那么UIApplication和UIWindow又是怎么知道應(yīng)該把事件發(fā)送給哪個視圖的呢?我們可以看一下touches里面的UITouch對象的屬性。里面有window和view兩個字段,分別代表事件分發(fā)的UIWindow和最佳響應(yīng)者的地址(需要注意的是這個地址并不代表最終響應(yīng)事件的UIResponder地址,只是會最先分發(fā)給它,它也可以不對事件作出響應(yīng))。還有一個字段gestureRecongnizers,這里面存儲了響應(yīng)鏈上的視圖上面添加的手勢(這里面的東西在后面講到的手勢識別器會有涉及)。

FEA6ED47-036A-4086-94D5-802D11DFF86D.png

事件的響應(yīng)

響應(yīng)者鏈上面的每個響應(yīng)者都是繼承于UIResponder的對象,每個UIResponder對象都默認(rèn)實現(xiàn)了4個響應(yīng)觸摸事件的方法:

- (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;

系統(tǒng)默認(rèn)的方法不對事件做任何處理,只是將事件沿著響應(yīng)者鏈傳遞。如果想要截獲事件進行自定義的響應(yīng)操作,就要重寫相關(guān)的方法。例如:重寫touchesMoved方法實現(xiàn)簡單的視圖拖動。

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

{

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self.view];

CGPoint prePoint = [touch previousLocationInView:self.view];

self.aView.transform = CGAffineTransformTranslate(self.aView.transform, point.x - prePoint.x, point.y - prePoint.y);

}

該方法在父視圖和子視圖中重寫會有不同的效果,如果在父視圖中重寫,點擊位置在你要移動的子視圖之外也可以移動。如果在子視圖中重寫,則點擊位置需要在子視圖的范圍之內(nèi)才可以移動。

事件在響應(yīng)者鏈上的傳遞

前面一直在提最佳響應(yīng)者,之所以稱為"最佳",是因為其具備響應(yīng)事件的最高優(yōu)先權(quán)(響應(yīng)鏈頂端的男人)。最佳響應(yīng)者首先接收到事件,然后便擁有了對事件的絕對控制權(quán):它既可以選擇獨吞這個事件,也可以將這個事件往下傳遞給其它響應(yīng)者,這個由響應(yīng)者構(gòu)成的鏈就稱之為響應(yīng)者鏈。

需要注意的是,上面也說到了事件的傳遞,這與此處所說的事件的傳遞有本質(zhì)的區(qū)別。上面所說的事件的傳遞的目的是為了尋找事件的最佳響應(yīng)者,是自下而上的傳遞。而這里的事件傳遞的目的是響應(yīng)者對事件作出響應(yīng),這個過程是自上而下的,前者為"尋找",后者為"響應(yīng)"。

響應(yīng)者對于事件的操作方式:

響應(yīng)者對于事件的攔截以及傳遞都是通過touchesBegan:withEvent:方法控制的,該方法的默認(rèn)實現(xiàn)是將事件沿著默認(rèn)的響應(yīng)鏈往下傳遞。(如果你在不同的UIResponder對象上面都聲明了touchMoved方法,那么這些對象都可以執(zhí)行該方法,因為touchesBegan方法默認(rèn)是把事件沿著響應(yīng)鏈傳遞的。如果只想讓一個對象響應(yīng)touchesMoved方法,需要重寫touchesBegan方法以攔截事件)

響應(yīng)者對于接收到的事件有3種操作:

不攔截,默認(rèn)操作

事件會自動沿著默認(rèn)的響應(yīng)鏈向下傳遞

攔截,不再往下分發(fā)事件

重寫touchesBegan:withEvent:方法進行事件處理,不調(diào)用父類的touchesBegan:withEvent:方法

攔截,繼續(xù)往下分發(fā)事件

重寫touchesBegan:withEvent:進行事件處理,同時調(diào)用父類的touchesBegan:withEvent:將事件往下傳遞

響應(yīng)鏈中的事件傳遞規(guī)則:

每一個響應(yīng)者對象(UIResponder對象)都有一個nextResponder方法,用于獲取響應(yīng)鏈中當(dāng)前對象的下一個響應(yīng)者。因此,一旦事件的最佳響應(yīng)者確定了,這個事件所處的響應(yīng)鏈就確定了。

對于響應(yīng)者對象,默認(rèn)的nextResponder實現(xiàn)如下:

UIView

若視圖是控制器的根視圖,則其nextResponder為控制器對象;否則,其nextResponder為父視圖。

UIViewController

若控制器的視圖是window的根視圖,則其nextResponder為窗口對象;若控制器是從別的控制器present出來的,則其nextResponder為presenting view controller。

UIWindow

nextResponder為UIApplication對象

UIApplication

若當(dāng)前應(yīng)用的app delegate是一個UIResponder對象,且不是UIView、UIViewController或app本身,則UIApplication的nextResponder為app delegate

AppDelegate

nextResponder為nil

792F789A-7322-4E73-A92D-513340F7AFB4.png

上圖是官網(wǎng)對于響應(yīng)鏈的示例展示,若觸摸發(fā)生在UITextField上,則事件的傳遞順序是:

UITextField->UIView->UIView->UIViewController->UIWindow->UIApplication->UIApplicationDelegate

圖中虛線箭頭是指若該UIView是作為UIViewController根視圖存在的,則其nextResponder為UIViewController對象;若是直接add在UIWindow上的,則其nextResponder為UIWindow對象。

可以通過重寫UIResponder對象的- (nullable UIResponder*)nextResponder;方法改變響應(yīng)者鏈,但是UIResponder對象的nextResponder屬性是只讀屬性,不能直接賦值。

UIGestureRecognizer

在iOS中有六種手勢操作:

UITapGestureRecognizer 點按手勢

UIPinchGestureRecognizer 捏合手勢

UIPanGestureRecognizer 拖動手勢

UISwipeGestureRecognizer 輕掃手勢,支持四個方向的輕掃,但是不同的方向要分別定義輕掃手勢

UIRotationGestureRecognizer 旋轉(zhuǎn)手勢

UILongPressGestureRecognizer 長按手勢

所有的手勢操作都繼承于UIGestureRecognizer,這個類本身不能直接使用。這個類中定義了這幾種手勢公有的一些屬性和方法。

CFFB9CE8-59D3-4DDB-B9D7-70D4E77702A8.png

手勢狀態(tài)

這里著重解釋一下上表中手勢狀態(tài)這個對象。在六種手勢識別中,只有一種手勢是離散手勢,它就是UITapGestureRecognizer。離散手勢的特點就是一旦識別就無法取消,而且只會調(diào)用一次手勢操作(初始化手勢時指定的觸發(fā)方法)。其它五種手勢是連續(xù)手勢,連續(xù)手勢的特點就是會多次調(diào)用手勢操作事件,而且在連續(xù)手勢識別后可以取消手勢。從下面兩圖中可以看出兩者調(diào)用操作事件的次數(shù)是不同的:

471B0C89-9B09-4A78-8607-2916464989B6.png

在iOS中將手勢狀態(tài)分為如下幾種:

2D616318-E45F-43B0-B651-CB70C5037F76.png

對于離散型手勢UITapGestureRecognizer要么被識別,要么失敗,點按(假設(shè)點按次數(shù)設(shè)置為1,并且沒有添加長按手勢)下去一次不松開則此時什么也不會發(fā)生,松開手指立即識別并調(diào)用操作事件,并且狀態(tài)為3(已完成)。

但是連續(xù)手勢要復(fù)雜一些,就拿旋轉(zhuǎn)手勢來說,如果兩個手指點下去不做任何操作,此時并不能識別手勢(因為我們還沒有旋轉(zhuǎn))但是其實已經(jīng)出發(fā)了觸摸開始事件,此時處于狀態(tài)0;如果此時旋轉(zhuǎn)會被識別,也就會調(diào)用對應(yīng)的操作事件,同時狀態(tài)變成1(手勢開始),但是狀態(tài)1只有一瞬間;緊接著變成狀態(tài)2(因為我們的旋轉(zhuǎn)需要持續(xù)一會),并且重復(fù)調(diào)用操作事件(如果在事件中打印狀態(tài)會重復(fù)打印2);松開手指,此時狀態(tài)變?yōu)?,并調(diào)用1次操作事件。

為了大家更好的理解這個狀態(tài)的變化,不妨在操作事件中打印事件狀態(tài),會發(fā)現(xiàn)在操作事件中的狀態(tài)永遠(yuǎn)不可能為0(默認(rèn)狀態(tài)),因為只要調(diào)用此事件說明已經(jīng)被識別了。前面也說過,手勢識別從根本還是調(diào)用觸摸事件而完成的,連續(xù)手勢之所以會發(fā)生狀態(tài)轉(zhuǎn)換完全是由于觸摸事件中的移動事件造成的,沒有移動事件也就不存在這個過程中狀態(tài)變化。

大家通過蘋果官方的分析圖再理解一下上面說的內(nèi)容:

313E155C-7FD0-4685-A297-812FB3870CC4.png

手勢的具體使用這里就不贅述了,先來看一下下面幾種使用手勢時產(chǎn)生沖突的情況。

手勢和UIResponder之間的沖突

先看一個簡單的例子:

BA814FD0-7F14-4BE1-A902-9C1C1F52BB6C.png

控制器的視圖上add了一個View記為YellowView,并綁定了一個單擊手勢識別器。

@interface ViewController ()

@property (weak, nonatomic) IBOutlet YellowView *yellowView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];

[self.yellowView addGestureRecognizer:tap];

}

- (void)tap:(id)sender {

NSLog(@"tap");

}

@end

點擊YellowView,日志打印如下:

FAD8DBA7-D76E-4C4C-AA7A-A71CE1D648BA.png

從日志上看出YellowView最后cancel了對觸摸事件的響應(yīng),而正常應(yīng)當(dāng)是觸摸結(jié)束后,YellowView的touchesEnded:withEvent:方法被調(diào)用才對。另外,期間還執(zhí)行了手勢識別器綁定的action。對于這種現(xiàn)象,官方文檔上有這么一段描述:

A window delivers touch events to a gesture recognizer before it delivers them to the hit-tested view attached to the gesture recognizer. Generally, if a gesture recognizer analyzes the stream of touches in a multi-touch sequence and doesn’t recognize its gesture, the view receives the full complement of touches. If a gesture recognizer recognizes its gesture, the remaining touches for the view are cancelled. The usual sequence of actions in gesture recognition follows a path determined by default values of the cancelsTouchesInView, delaysTouchesBegan, delaysTouchesEnded properties:

這段描述的意思是:UIWindow會先把touch事件分發(fā)給手勢識別器,然后再分發(fā)給hit-tested view,如果一個手勢識別器分析了這一系列的點擊事件之后沒有識別出該手勢,hit-tested view將會接收完整的點擊事件。如果手勢識別器識別了該手勢,hit-tested view將會取消這次點擊。由此可以看出:手勢識別器比UIResponder具有更高的事件響應(yīng)優(yōu)先級。

按照這個解釋,UIWindow在將事件傳遞給hit-tested view即YellowView之前,先傳遞給了手勢識別器。手勢識別器成功識別了該事件,通知application取消YellowView對事件的響應(yīng)。

然而看日志,卻是YellowView的touchesBegan:withEvent:先調(diào)用了,既然手勢識別器先響應(yīng),不應(yīng)該上面的action先執(zhí)行嗎?實際上這個認(rèn)知是錯誤的。手勢識別器的action的調(diào)用時機并不是手勢識別器接收到事件的時機,而是手勢識別器成功識別事件后的時機,即手勢識別器的狀態(tài)變?yōu)閁IGestureRecognizerStateRecognized。要證明UIWindow先將事件傳遞給了手勢識別器,還是需要看手勢識別器中這四個熟悉的方法的調(diào)用結(jié)果。

- (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;

不過不要誤會,UIGestureRecognizer并不繼承于UIResponder類,他們只是方法名相同而已。

這樣,我們就可以自定義一個繼承自UITapGestureRecognizer的子類,重寫這四個方法,觀察事件分發(fā)的順序。上面的四個分發(fā)聲明在UIGestureRecognizerSubclass.h中,所以想要重寫的話需要引入頭文件#import 。

#import "TapGestureRecognizer.h"

#import

@implementation TapGestureRecognizer

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

{

// 這里需要調(diào)用一下父類的touchesBegan方法,否則事件會被攔截消耗掉

[super touchesBegan:touches withEvent:event];

NSLog(@"%s", __func__);

}

@end

點擊YellowView,輸出以下內(nèi)容:

F5295756-A948-4B7D-9F7E-EDB5A7B3B488.png

可以看到,確實是手勢識別器先接收到了事件,然后hit-tested view接收到事件。接著手勢識別器識別了手勢,執(zhí)行action,再由Application取消了YellowView對事件的響應(yīng)。

那么UIWindow是怎么知道要把事件傳遞給哪些手勢識別器的呢?我們上面有一張圖提到過,這些手勢識別器的相關(guān)信息都儲存在UITouch對象的gestureRecognizers里面,這是一個數(shù)組,可以儲存多個手勢識別器。

UIGestureRecognizer分為離散型手勢和持續(xù)型手勢,我們上面的demo用的是離散型手勢,那么如果是持續(xù)型手勢又會有什么樣的結(jié)果呢?我們把UITapGestureRecognizer用UIPanGestureRecognizer替換,然后在YellowView上面執(zhí)行一次滑動,輸出結(jié)果如下:

4D526623-3469-45E1-9166-C49F74A7F581.png

在一開始滑動的過程中,手勢識別器處在識別手勢階段,滑動產(chǎn)生的連續(xù)事件既會傳遞給手勢識別器又會傳遞給YellowView,因此YellowView的touchesMoved:withEvent:在開始一段時間內(nèi)會持續(xù)調(diào)用;當(dāng)手勢識別器成功識別了該滑動手勢時,手勢識別器的action開始調(diào)用,同時通知Application取消YellowView對事件的響應(yīng)。之后僅由滑動手勢識別器接收事件并響應(yīng),YellowView不再接收事件。另外,在滑動的過程中,若手勢識別器未能識別手勢,則事件在觸摸滑動過程中會一直傳遞給hit-tested view,直到觸摸結(jié)束。

手勢識別器的3個屬性

@property(nonatomic) BOOL cancelsTouchesInView;

@property(nonatomic) BOOL delaysTouchesBegan;

@property(nonatomic) BOOL delaysTouchesEnded;

在介紹這三個屬性之前,先來總結(jié)一下手勢識別器與UIResponder對于事件響應(yīng)的聯(lián)系:

當(dāng)觸摸發(fā)生或者觸摸的狀態(tài)發(fā)生變化時,UIWindow都會傳遞事件尋求響應(yīng)。

UIWindow先將綁定了觸摸對象的事件傳遞給觸摸對象上綁定的手勢識別器,再發(fā)送給觸摸對象對應(yīng)的hit-tested view。

手勢識別器識別手勢期間,若觸摸對象的觸摸狀態(tài)發(fā)生變化,事件都是先發(fā)送給手勢識別器再發(fā)送給hit-test view。

手勢識別器若成功識別了手勢,則通知Application取消hit-tested view對于事件的響應(yīng),并停止向其發(fā)送事件。

若手勢識別器未能識別手勢,而此時觸摸并未結(jié)束,則停止向手勢識別器發(fā)送事件,僅向hit-tested view發(fā)送事件。

若手勢識別器未能識別手勢,且此時觸摸已結(jié)束,則向hit-tested view發(fā)送end狀態(tài)的touch事件以停止對事件的響應(yīng)。

cancelsTouchInView

默認(rèn)為YES。表示當(dāng)手勢識別器成功識別了手勢之后,會通知Application取消響應(yīng)鏈對事件的響應(yīng),并不再傳遞事件給hit-tested view。若設(shè)置成NO,表示手勢識別成功后不取消響應(yīng)鏈對事件的響應(yīng),事件依舊會傳遞給hit-test view。把上面的demo中手勢的cancelsTouchInView屬性設(shè)置為NO,打印輸出結(jié)果:

2AFFDDBD-4425-40EE-882D-6DA7BC4F5138.png

可以看到,即便滑動手勢識別器識別了手勢,Application也會依舊發(fā)送事件給YellowView。

delaysTouchesBegan

默認(rèn)為NO。默認(rèn)情況下手勢識別器在識別手勢期間,當(dāng)觸摸狀態(tài)發(fā)生改變時,Application都會將事件分別傳遞給手勢識別器和hit-tested view;若設(shè)置成YES,則表示手勢識別器再識別手勢期間,截斷事件,即不會將事件發(fā)送給hit-tested view。把上面demo中的手勢識別器的delaysTouchesBegan設(shè)置為YES。

36D3BB79-B0A9-499D-8BEE-B857914B7062.png

因為滑動手勢識別器在識別期間,事件不會傳遞給YellowView,因此期間YellowView的touchesBegan:withEvent:和touchesMoved:withEvent:都不會被調(diào)用。而后滑動手勢識別器成功識別了手勢,也就獨吞了事件,不會再傳遞給YellowView。因此只打印了手勢識別器成功識別手勢后的action調(diào)用。

delaysTouchesEnded

默認(rèn)為YES。當(dāng)手勢識別失敗時,若此時觸摸已經(jīng)結(jié)束,會延遲一小段時間再調(diào)用響應(yīng)者的touchesEnded:withEvent:。若設(shè)置成NO,則在手勢識別失敗時會立即通知Application發(fā)送狀態(tài)為end的touch事件給hit-tested view以調(diào)用touchesEnded:withEvent:結(jié)束事件響應(yīng)。

同一個視圖中的不同手勢之間的沖突

如果在同一個視圖上添加不同的手勢時,也有可能會發(fā)生沖突。照例先上代碼:

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];

[self.imageView addGestureRecognizer:pan];

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];

[self.imageView addGestureRecognizer:swipe];

}

- (void)pan:(UIPanGestureRecognizer *)gestureRecognizer

{

if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {

CGPoint point = [gestureRecognizer translationInView:self.imageView];

self.imageView.transform = CGAffineTransformMakeTranslation(point.x, point.y);

}else if (gestureRecognizer.state == UIGestureRecognizerStateEnded){

[UIView animateWithDuration:0.3 animations:^{

self.imageView.transform = CGAffineTransformIdentity;

}];

}

NSLog(@"%s", __func__);

}

- (void)swipe:(UISwipeGestureRecognizer *)gestureRecognizer

{

static BOOL flag = NO;

self.imageView.image = flag ? [UIImage imageNamed:@"b4723daa4e8f8fc434bc2e79a1bc4d8c"] : [UIImage imageNamed:@"a96703f39203a4e650f9e24655dc4864"];

flag = !flag;

NSLog(@"%s", __func__);

}

@end

代碼很簡單,最初我們的目的是在imageView上面添加一個拖動手勢,一個輕掃手勢。拖動的時候改變圖片的位置,輕掃的時候切換圖片。

QQ20171205-111141.gif

D6004995-02E2-46CE-A53E-F686D6784DF6.png

可以看到,盡管我減小了輕掃的幅度,加快了速度,輕掃手勢依然沒有起作用,就是因為輕掃和拖動這兩個手勢起了沖突。沖突的原因很簡單,拖動手勢的操作事件是在手勢的開始狀態(tài)(狀態(tài)1)識別執(zhí)行的,而輕掃手勢的操作事件只有在手勢結(jié)束狀態(tài)(狀態(tài)3)才能執(zhí)行,因此輕掃手勢就作為了犧牲品沒有被正確識別。要解決這個沖突可以利用requireGestureRecognizerToFail:方法來完成,這個方法可以指定某個手勢執(zhí)行的前提是另一個手勢識別失敗。

這里我們把拖動手勢設(shè)置為輕掃手勢識別失敗之后執(zhí)行,這樣一來我們手指輕輕滑動時系統(tǒng)會優(yōu)先考慮輕掃手勢,如果最后發(fā)現(xiàn)該操作不是輕掃,那么就會執(zhí)行拖動。

只需要添加代碼:

[pan requireGestureRecognizerToFail:swipe];

運行效果:

QQ20171205-135252.gif

不同視圖上的手勢沖突

在上面響應(yīng)者鏈的學(xué)習(xí)中,我們知道了UIResponder響應(yīng)事件的時候是有優(yōu)先級的,上層觸摸事件執(zhí)行后就不再向下傳播。默認(rèn)情況下手勢也是類似的,先識別的手勢會阻斷手勢識別操作繼續(xù)傳播。下面我們用代碼驗證一下:

我們在控制器的視圖上面添加一個黃色的子視圖,然后在黃色視圖上面添加一個自定義的滑動手勢,在控制器的view上面也添加一個自定義的滑動手勢。在自定義的滑動手勢里面重寫touchBegan:withEvent:這四個相關(guān)的方法.

@interface GestureRecognizer : UIPanGestureRecognizer

@property (nonatomic, strong) NSString *panName;

@end

@implementation GestureRecognizer

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

{

[super touchesBegan:touches withEvent:event];

NSLog(@"%s--%@", __func__, self.panName);

}

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

{

[super touchesMoved:touches withEvent:event];

NSLog(@"%s--%@", __func__, self.panName);

}

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

{

[super touchesEnded:touches withEvent:event];

NSLog(@"%s--%@", __func__, self.panName);

}

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

{

[super touchesCancelled:touches withEvent:event];

NSLog(@"%s--%@", __func__, self.panName);

}

@end

// ViewController

@interface ViewController ()

@property (weak, nonatomic) IBOutlet YellowView *yellowView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

GestureRecognizer *pan = [[GestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];

pan.panName = @"第一個";

[self.yellowView addGestureRecognizer:pan];

GestureRecognizer *panBottom = [[GestureRecognizer alloc] initWithTarget:self action:@selector(panBottom:)];

panBottom.panName = @"第二個";

[self.view addGestureRecognizer:panBottom];

}

- (void)pan:(UIPanGestureRecognizer *)gestureRecognizer

{

NSLog(@"%s", __func__);

}

- (void)panBottom:(UIGestureRecognizer *)gestureRecognizer{

NSLog(@"%s", __func__);

}

在黃色視圖上滑動,輸出以下結(jié)果:

ACB1FA17-AC4B-4B57-ACB1-84BBBF83221F.png

可以看到,在手勢識別期間,UIWindow會依次向兩個手勢識別器和hit-test view發(fā)送事件,而手勢識別成功后,UIWindow停止向控制器視圖上面添加的滑動手勢發(fā)送事件,導(dǎo)致其action無法被調(diào)用,從而產(chǎn)生沖突。為什么停止接收事件的是第二個滑動手勢呢?還記得我們上面提到過的UITouch里面的數(shù)組gestureRecognizers嗎,手勢識別的優(yōu)先級跟數(shù)組的數(shù)據(jù)是保持一致的,和響應(yīng)者鏈的響應(yīng)順序也有點類似。

4AE1F41A-62F1-4DB3-8CF4-D71F21AF2547.png

我們可以看到,第一個手勢儲存在數(shù)組的最前面,他的優(yōu)先級比較高,所以會首先被響應(yīng)。

那么如何讓兩個有層次關(guān)系并且都添加了手勢的控件都能正確識別手勢呢?答案就是利用手勢代理的gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:代理方法。

蘋果官方是這么描述這個方法的:

Asks the delegate if two gesture recognizers should be allowed to recognize gestures simultaneously.

This method is called when recognition of a gesture by either gestureRecognizer or otherGestureRecognizer would block the other gesture recognizer from recognizing its gesture. Note that returning YES is guaranteed to allow simultaneous recognition; returning NO, on the other hand, is not guaranteed to prevent simultaneous recognition because the other gesture recognizer's delegate may return YES.

這個方法主要是為了詢問手勢的代理,是否允許兩個手勢識別器同時識別該手勢。返回YES可以確保允許同時識別手勢,返回NO的話不能保證一定不能同時識別,因為其他手勢的代理也有可能返回YES。

在上面demo的ViewController中遵循UIGestureRecognizerDelegate協(xié)議,設(shè)置第一個手勢的代理為self,添加如下代碼:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(nonnull UIGestureRecognizer *)otherGestureRecognizer

{

return YES;

}

滑動黃色視圖,輸出以下結(jié)果:

45EB01B5-9148-4B7A-B53B-D3FAA63BFD7B.png

可以看到兩個手勢的action同時被調(diào)用了。

UIControl

UIControl是系統(tǒng)提供的能夠以target-action模式處理觸摸事件的控件,iOS中UIButton、UISegmentControl、UISwitch等控件都是UIControl的子類。值得注意的是,UIControl是UIView的子類,因此本身也具有UIResponder的屬性。UIControl是一個抽象基類,我們不能直接使用UIControl類來實例化控件,它只是為控件子類定義一些通用的接口,并提供一些基礎(chǔ)實現(xiàn)。

UIControl作為能夠響應(yīng)事件的控件,必然也需要待事件交互符合條件時才去響應(yīng),因此也會跟蹤事件發(fā)生的過程,不同于UIControl以及UIGestureRecognizer通過touches系列方法跟蹤,UIControl有其獨特的跟蹤方式:

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;

- (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)event;

- (void)cancelTrackingWithEvent:(nullable UIEvent *)event;

乍一看,這四個方法和UIResponder那四個方法幾乎吻合,只不過UIControl只能接收單點觸控,因此這四個方法的參數(shù)是單個的UITouch對象。這四個方法的智能也和UIResponder一致,用來跟蹤觸摸的開始、滑動、結(jié)束、取消。不過,UIControl本身也是UIResponder,因此同樣有touches系列的4個方法。事實上,UIControl的Tracking系列方法是在touch系列方法內(nèi)部調(diào)用的。比如beginTrackingWithTouch是在touchesBegan方法內(nèi)部調(diào)用的。這個我們也可以驗證:

自定義一個繼承于UIControl的子類,重寫beginTrackingWithTouch和touchesBegan:withEvent:方法。

代碼如下:

@implementation Control

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

{

NSLog(@"進入%s", __func__);

[super touchesBegan:touches withEvent:event];

NSLog(@"離開%s", __func__);

}

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event

{

NSLog(@"%s", __func__);

return [super beginTrackingWithTouch:touch withEvent:event];

}

@end

點擊自定義的Control,輸出以下結(jié)果:

{2BE316C1-94A7-4C85-8CCD-68FBEB8170CE}.png

可以看出,touchesBegan方法調(diào)用了beginTrackingWithTouch方法。這也說明了另外一個問題,UIControl的touchesBegan方法的實現(xiàn)與UIResponder的touchesBegan方法是有區(qū)別的。

當(dāng)UIControl跟蹤事件的過程中,識別出事件交互符合響應(yīng)條件,就會觸發(fā)target-action進行響應(yīng)。UIControl控件通過addTarget:action:forControlEvents:添加事件處理的target和action,當(dāng)事件發(fā)生時,UIControl會調(diào)用sendAction:to:forEvent:來將event發(fā)送給UIApplication對象,再由UIApplication對象調(diào)用其sendAction:to:fromSender:forEvent:方法來將消息分發(fā)到指定的target上。

C8509D7E-767F-45F8-9F4F-2012288348AA.png

因此,我們可以通過重寫UIControl的sendAction:to:forEvent:或sendAction:to:from:forEvent:自定義事件執(zhí)行的target及action。

If you specify nil for the target object, the control searches the responder chain for an object that defines the specified action method.

另外,若不指定target,即addTarget:action:forControlEvents:時target傳空,那么當(dāng)事件發(fā)生時,UIControl會在響應(yīng)鏈從上往下尋找定義了指定action方法的對象來響應(yīng)該action。

UIControl里面還有一個方法叫做sendActionsForControlEvents:這個方法的作用是發(fā)送與指定類型相關(guān)的所有行為消息。我們可以在任意位置(包括控件內(nèi)部和外部)調(diào)用控件的這個方法來發(fā)送參數(shù)controlEvents指定的消息。

UIControl、UIResponder、UIGestureRecognizer之間的優(yōu)先級關(guān)系

上面我們已經(jīng)分析過了,UIGestureRecognizer的優(yōu)先級是比UIResponder的優(yōu)先級高的,那么如果再加上一個UIControl呢?

我們先來比較一下UIControl和UIResponder之間的優(yōu)先級關(guān)系,這里的UIResponder我們用UIView來代替

首先如果UIControl添加在UIView上面的時候,毋庸置疑,UIControl會首先響應(yīng),參照button添加在視圖上。那么如果把UIView添加在UIControl上面的時候,誰會響應(yīng)事件呢?我們用代碼來驗證一下:

自定義一個UIView,重寫touchesBegan:方法

@implementation YellowView

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

{

NSLog(@"%s", __func__);

}

@end

自定義一個UIControl,里面什么都不用寫。

在ViewController里面添加如下代碼:

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

Control *control = [[Control alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];

control.backgroundColor = [UIColor redColor];

[control addTarget:self action:@selector(clickControl:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:control];

YellowView *yellowView = [[YellowView alloc] initWithFrame:CGRectMake(10, 10, 50, 50)];

yellowView.backgroundColor = [UIColor yellowColor];

[control addSubview:yellowView];

}

- (void)clickControl:(UIControl *)control

{

NSLog(@"click Control");

}

@end

點擊上層的UIControl,輸出結(jié)果如下:

E0B59E0B-0468-46E4-91F4-0B723E2BDD95.png

可以看到UIControl的action并沒有響應(yīng)。看來自定義的UIControl與UIResponder之間的優(yōu)先級還是遵循響應(yīng)鏈的層級的,這就表示UIResponder和UIControl的優(yōu)先級是相同的,而UIGestureRecognizer的優(yōu)先級比UIControl高,由此推斷的話,UIGestureRecognizer的優(yōu)先級好像是比UIControl高的,具體是什么樣子的,我們還是來驗證一下。

現(xiàn)在我們把層級改變一下,把UIControl添加到y(tǒng)ellowView上面,然后給yellowView添加一個tap手勢,代碼如下:

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

YellowView *blueView = [[YellowView alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];

blueView.backgroundColor = [UIColor blueColor];

[self.view addSubview:blueView];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];

[blueView addGestureRecognizer:tap];

Control *control = [[Control alloc] initWithFrame:CGRectMake(10, 10, 50, 50)];

control.backgroundColor = [UIColor redColor];

[control addTarget:self action:@selector(clickControl:) forControlEvents:UIControlEventTouchUpInside];

[blueView addSubview:control];

}

- (void)clickControl:(UIControl *)control

{

NSLog(@"click Control");

}

- (void)tap:(UIGestureRecognizer *)gestureRecognizer

{

NSLog(@"tap");

}

@end

這里為了讓我們的代碼更嚴(yán)謹(jǐn),我們把上面YellowView中重寫的touchesBegan方法注掉。現(xiàn)在點擊自定義的Control,打印結(jié)果如下:

1A500D7E-69C1-4BA4-B537-660B4D4F90D1.png

可以看到,系統(tǒng)執(zhí)行了手勢的action,并沒有執(zhí)行UIControl的action,這好像跟我們上面預(yù)測的手勢的優(yōu)先級比UIControl高是一致的。但是真的是這樣嗎?我們把自定義的UIControl替換成UIButton,其它地方不變,再點擊一次button,打印結(jié)果變成了這樣:

A4E97A1F-19D8-4B80-BCEB-625FC3EA2D1F.png

同樣都是繼承于UIControl,這control和control的差別咋就那么大捏???

別急,蘋果爸爸已經(jīng)給了我們合理的解釋:

In iOS 6.0 and later, default control actions prevent overlapping gesture recognizer behavior. For example, the default action for a button is a single tap. If you have a single tap gesture recognizer attached to a button’s parent view, and the user taps the button, then the button’s action method receives the touch event instead of the gesture recognizer.This applies only to gesture recognition that overlaps the default action for a control, which includes:

A single finger single tap on a UIButton, UISwitch, UIStepper, UISegmentedControl, and UIPageControl.

A single finger swipe on the knob of a UISlider, in a direction parallel to the slider.

A single finger pan gesture on the knob of a UISwitch, in a direction parallel to the switch.

在iOS6以后,默認(rèn)的control actions會阻止與該action操作相同的手勢的識別。例如:UIButton的默認(rèn)操作是單擊,如果你在這個button的父視圖上面添加了一個tap手勢,用戶單擊button,系統(tǒng)會調(diào)用button的action而不是手勢的action。這種規(guī)則僅僅適用于手勢操作和UIcontrol的默認(rèn)操作相同的情況下,包含以下幾種情況:

單擊:UIButton,UISwitch,UIStepper,UISegmentedControl和UIPageControl

滑動:UISlider,滑動方向與slider平行

拖動:UISwitch,拖動方向與switch平行

這里提到了兩點,第一是手勢和UIControl的默認(rèn)操作相同,也就是說如果UIControl沒有默認(rèn)操作(比如我們自定義的UIControl)或者是默認(rèn)操作和添加的手勢不同,那么手勢識別器的識別優(yōu)先級高,UIControl不會阻止手勢識別。第二是在UIButton的父視圖上添加手勢,如果你把一個添加了手勢的視圖添加在UIButton上面,那么UIButton是不能阻止該手勢識別的。這兩點讀者可以自行驗證。

總結(jié):自定義的UIControl和UIResponder的優(yōu)先級相同,都比UIGestureRecognizer低,有默認(rèn)操作的UIControl會組織添加在父視圖上面的有相同操作的手勢的識別。

總結(jié)

以上是生活随笔為你收集整理的ios触摸超出_iOS触摸事件处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

日韩人妻系列无码专区 | 激情五月综合色婷婷一区二区 | 亚洲欧美精品伊人久久 | 亚洲国产成人av在线观看 | 久久精品国产亚洲精品 | 扒开双腿疯狂进出爽爽爽视频 | 小鲜肉自慰网站xnxx | 国产精品久久国产精品99 | 麻花豆传媒剧国产免费mv在线 | 免费无码午夜福利片69 | www一区二区www免费 | 国产一区二区三区四区五区加勒比 | 狠狠色欧美亚洲狠狠色www | 中文字幕无码乱人伦 | 无码人妻丰满熟妇区五十路百度 | 欧美亚洲日韩国产人成在线播放 | 亚洲精品成人av在线 | av在线亚洲欧洲日产一区二区 | 日韩少妇内射免费播放 | 国精品人妻无码一区二区三区蜜柚 | 色五月五月丁香亚洲综合网 | 玩弄人妻少妇500系列视频 | 亚洲男女内射在线播放 | 国产在线精品一区二区三区直播 | 久久人人97超碰a片精品 | 国产午夜亚洲精品不卡下载 | 国产猛烈高潮尖叫视频免费 | 亚洲一区二区三区含羞草 | 日本护士毛茸茸高潮 | 久久久精品成人免费观看 | 亚洲日本一区二区三区在线 | 黑人玩弄人妻中文在线 | 一本色道久久综合亚洲精品不卡 | 日韩无套无码精品 | 国内精品人妻无码久久久影院 | 久久精品国产日本波多野结衣 | 牲交欧美兽交欧美 | 荡女精品导航 | 日韩视频 中文字幕 视频一区 | 蜜桃av抽搐高潮一区二区 | 免费无码av一区二区 | 亚洲日韩av一区二区三区四区 | 亚洲中文无码av永久不收费 | 装睡被陌生人摸出水好爽 | 国产亚洲美女精品久久久2020 | 岛国片人妻三上悠亚 | 少妇被粗大的猛进出69影院 | 无码人妻丰满熟妇区毛片18 | 精品夜夜澡人妻无码av蜜桃 | 欧美变态另类xxxx | 秋霞成人午夜鲁丝一区二区三区 | 亚洲小说图区综合在线 | 国产亚洲视频中文字幕97精品 | 成人免费视频在线观看 | 中文字幕 亚洲精品 第1页 | 99精品久久毛片a片 | 一本色道婷婷久久欧美 | 欧美怡红院免费全部视频 | 亚洲国产精品美女久久久久 | 无码人妻久久一区二区三区不卡 | 天堂无码人妻精品一区二区三区 | 国内揄拍国内精品人妻 | 亚洲成色www久久网站 | 成人免费视频视频在线观看 免费 | 99久久精品无码一区二区毛片 | 熟女俱乐部五十路六十路av | 人人妻人人澡人人爽欧美精品 | 欧洲精品码一区二区三区免费看 | 免费无码的av片在线观看 | 午夜精品一区二区三区的区别 | 国产两女互慰高潮视频在线观看 | 无遮挡国产高潮视频免费观看 | 日韩精品a片一区二区三区妖精 | 一二三四在线观看免费视频 | ass日本丰满熟妇pics | 久久久精品成人免费观看 | 欧美日韩色另类综合 | 亚洲伊人久久精品影院 | 日韩精品久久久肉伦网站 | 国产性生大片免费观看性 | 无码人妻丰满熟妇区毛片18 | 国产精品嫩草久久久久 | 欧美自拍另类欧美综合图片区 | 性色av无码免费一区二区三区 | 亚洲人交乣女bbw | 久久精品国产亚洲精品 | 玩弄少妇高潮ⅹxxxyw | 国精产品一区二区三区 | 老熟妇仑乱视频一区二区 | 国产精品资源一区二区 | 玩弄人妻少妇500系列视频 | 中文字幕日产无线码一区 | 亚洲精品一区二区三区大桥未久 | 18精品久久久无码午夜福利 | 亚洲精品鲁一鲁一区二区三区 | 中文字幕+乱码+中文字幕一区 | 99国产精品白浆在线观看免费 | 国产高清不卡无码视频 | 国产一区二区三区四区五区加勒比 | 欧美丰满熟妇xxxx性ppx人交 | 日日橹狠狠爱欧美视频 | 日韩精品久久久肉伦网站 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久99国产综合精品 | 99久久精品午夜一区二区 | 丰满诱人的人妻3 | 无码国模国产在线观看 | 国产99久久精品一区二区 | 性色av无码免费一区二区三区 | 国产精品第一国产精品 | 国产麻豆精品一区二区三区v视界 | 亚洲七七久久桃花影院 | 成人免费视频视频在线观看 免费 | 久久无码中文字幕免费影院蜜桃 | 亚洲精品久久久久avwww潮水 | 日韩精品无码一本二本三本色 | 噜噜噜亚洲色成人网站 | 国产精品久久国产精品99 | 国产高清不卡无码视频 | 色欲人妻aaaaaaa无码 | 亚洲自偷自偷在线制服 | 欧美怡红院免费全部视频 | 亚无码乱人伦一区二区 | 性欧美牲交xxxxx视频 | 2020最新国产自产精品 | 国产电影无码午夜在线播放 | 亚洲精品一区二区三区四区五区 | 无码av中文字幕免费放 | 成人无码精品1区2区3区免费看 | 未满小14洗澡无码视频网站 | 国产精品久久福利网站 | 成人毛片一区二区 | 久久亚洲精品成人无码 | 黑森林福利视频导航 | 国产肉丝袜在线观看 | 欧美人与禽猛交狂配 | 久精品国产欧美亚洲色aⅴ大片 | 97久久国产亚洲精品超碰热 | 亚洲精品综合一区二区三区在线 | 人妻中文无码久热丝袜 | 国内综合精品午夜久久资源 | 最近免费中文字幕中文高清百度 | 久久久www成人免费毛片 | 香蕉久久久久久av成人 | 欧美xxxxx精品 | 男人扒开女人内裤强吻桶进去 | 色狠狠av一区二区三区 | 亚洲国产av精品一区二区蜜芽 | 无码国产色欲xxxxx视频 | 高清国产亚洲精品自在久久 | 日日碰狠狠丁香久燥 | 亚洲国产一区二区三区在线观看 | 97色伦图片97综合影院 | 国产亚洲人成在线播放 | 日韩欧美中文字幕在线三区 | 国产热a欧美热a在线视频 | 久久精品国产一区二区三区肥胖 | 熟妇女人妻丰满少妇中文字幕 | 亚洲国产av精品一区二区蜜芽 | 人妻人人添人妻人人爱 | 国产97色在线 | 免 | 久久久久成人片免费观看蜜芽 | 中文字幕av日韩精品一区二区 | 狠狠噜狠狠狠狠丁香五月 | 成人免费视频视频在线观看 免费 | 久久99热只有频精品8 | 牲欲强的熟妇农村老妇女 | 欧美日韩视频无码一区二区三 | 精品 日韩 国产 欧美 视频 | 久久婷婷五月综合色国产香蕉 | 欧美性色19p | 欧美丰满熟妇xxxx | 3d动漫精品啪啪一区二区中 | 日本熟妇大屁股人妻 | 国产一区二区三区四区五区加勒比 | 精品国产精品久久一区免费式 | 精品成在人线av无码免费看 | 清纯唯美经典一区二区 | 亚洲无人区午夜福利码高清完整版 | 色综合久久久无码中文字幕 | 无码国内精品人妻少妇 | 啦啦啦www在线观看免费视频 | 色婷婷久久一区二区三区麻豆 | 国产69精品久久久久app下载 | 国产精品美女久久久网av | 久久久无码中文字幕久... | 日韩人妻无码中文字幕视频 | 97久久精品无码一区二区 | 国产免费久久久久久无码 | 熟妇人妻无乱码中文字幕 | 偷窥村妇洗澡毛毛多 | 久久伊人色av天堂九九小黄鸭 | 狠狠色噜噜狠狠狠狠7777米奇 | 一个人看的视频www在线 | 亚洲国产午夜精品理论片 | 亚洲精品一区二区三区在线观看 | 久久无码中文字幕免费影院蜜桃 | 老熟妇仑乱视频一区二区 | 欧美老熟妇乱xxxxx | 精品厕所偷拍各类美女tp嘘嘘 | 国产在热线精品视频 | 国产舌乚八伦偷品w中 | а√天堂www在线天堂小说 | 久久精品人妻少妇一区二区三区 | 国产莉萝无码av在线播放 | 欧洲美熟女乱又伦 | 亚洲一区二区三区 | 无码播放一区二区三区 | 亚洲最大成人网站 | 一个人看的www免费视频在线观看 | 亚洲人亚洲人成电影网站色 | 中国大陆精品视频xxxx | 无码毛片视频一区二区本码 | 55夜色66夜色国产精品视频 | 无码精品国产va在线观看dvd | 久久久无码中文字幕久... | 亚洲a无码综合a国产av中文 | √天堂资源地址中文在线 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 色偷偷人人澡人人爽人人模 | 秋霞成人午夜鲁丝一区二区三区 | 中文字幕无码av激情不卡 | 中文字幕人妻无码一区二区三区 | 玩弄中年熟妇正在播放 | 在教室伦流澡到高潮hnp视频 | 十八禁真人啪啪免费网站 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲 a v无 码免 费 成 人 a v | 99久久99久久免费精品蜜桃 | 久久无码专区国产精品s | 国产香蕉尹人视频在线 | 啦啦啦www在线观看免费视频 | 国内精品久久久久久中文字幕 | 精品一区二区三区无码免费视频 | 国产精品国产自线拍免费软件 | 天天做天天爱天天爽综合网 | 强奷人妻日本中文字幕 | 国产九九九九九九九a片 | 搡女人真爽免费视频大全 | 丰满岳乱妇在线观看中字无码 | aⅴ亚洲 日韩 色 图网站 播放 | 55夜色66夜色国产精品视频 | 亚洲男人av香蕉爽爽爽爽 | 76少妇精品导航 | 欧美 日韩 人妻 高清 中文 | 3d动漫精品啪啪一区二区中 | 麻豆国产丝袜白领秘书在线观看 | 亚洲中文字幕在线无码一区二区 | 国产av久久久久精东av | 国产精品久久精品三级 | 久久精品国产99久久6动漫 | 荫蒂被男人添的好舒服爽免费视频 | 强开小婷嫩苞又嫩又紧视频 | 亚洲日韩av片在线观看 | 久久精品中文字幕一区 | 国产精品二区一区二区aⅴ污介绍 | 风流少妇按摩来高潮 | 亚洲大尺度无码无码专区 | 男人和女人高潮免费网站 | 成人性做爰aaa片免费看 | 丰满人妻翻云覆雨呻吟视频 | 国产偷自视频区视频 | 欧美一区二区三区视频在线观看 | 国产激情一区二区三区 | 亚洲成av人片在线观看无码不卡 | 亚洲 激情 小说 另类 欧美 | 人妻aⅴ无码一区二区三区 | 久久99精品久久久久久动态图 | 久久亚洲中文字幕无码 | 国产av剧情md精品麻豆 | 中文字幕人成乱码熟女app | av无码电影一区二区三区 | 国产尤物精品视频 | 亚洲综合色区中文字幕 | 久久亚洲日韩精品一区二区三区 | 少妇人妻偷人精品无码视频 | 精品日本一区二区三区在线观看 | 自拍偷自拍亚洲精品被多人伦好爽 | 99re在线播放 | 精品水蜜桃久久久久久久 | 国产suv精品一区二区五 | 精品人妻中文字幕有码在线 | 四虎国产精品一区二区 | 国产一区二区三区日韩精品 | 国产乱人偷精品人妻a片 | 成年美女黄网站色大免费全看 | 成人女人看片免费视频放人 | 中文字幕乱码人妻无码久久 | 少妇人妻av毛片在线看 | 国产精品久久久久久亚洲影视内衣 | 国产欧美精品一区二区三区 | 疯狂三人交性欧美 | 人妻少妇精品久久 | 国产极品美女高潮无套在线观看 | 好爽又高潮了毛片免费下载 | 国内丰满熟女出轨videos | 999久久久国产精品消防器材 | 久久国产精品精品国产色婷婷 | 免费看男女做好爽好硬视频 | 高潮毛片无遮挡高清免费视频 | 精品无人国产偷自产在线 | 免费人成网站视频在线观看 | 久精品国产欧美亚洲色aⅴ大片 | 午夜无码人妻av大片色欲 | 激情国产av做激情国产爱 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲精品国产a久久久久久 | 亚洲综合精品香蕉久久网 | 无码纯肉视频在线观看 | 精品无码av一区二区三区 | 国产高清不卡无码视频 | 亚洲熟妇色xxxxx欧美老妇 | 午夜精品久久久内射近拍高清 | 在线精品国产一区二区三区 | 成人无码视频在线观看网站 | 对白脏话肉麻粗话av | 久久人妻内射无码一区三区 | 熟女少妇在线视频播放 | 久久综合狠狠综合久久综合88 | 久久精品国产精品国产精品污 | 东北女人啪啪对白 | 扒开双腿疯狂进出爽爽爽视频 | 日本护士毛茸茸高潮 | 偷窥村妇洗澡毛毛多 | 午夜理论片yy44880影院 | 亚洲欧美日韩国产精品一区二区 | 青青青爽视频在线观看 | 福利一区二区三区视频在线观看 | 国产av无码专区亚洲a∨毛片 | 丰满护士巨好爽好大乳 | 成年美女黄网站色大免费视频 | 2020久久超碰国产精品最新 | 亚洲va欧美va天堂v国产综合 | 少妇性荡欲午夜性开放视频剧场 | 成人精品视频一区二区 | 国产成人无码a区在线观看视频app | 免费观看的无遮挡av | 三上悠亚人妻中文字幕在线 | 亚洲色大成网站www国产 | 国产成人午夜福利在线播放 | 99久久久无码国产aaa精品 | 又大又硬又黄的免费视频 | 欧美兽交xxxx×视频 | 无码任你躁久久久久久久 | 久久综合香蕉国产蜜臀av | 日韩人妻无码中文字幕视频 | 亚洲色偷偷男人的天堂 | 日本肉体xxxx裸交 | 亚洲精品国偷拍自产在线麻豆 | 亚洲精品一区二区三区在线观看 | 国内精品人妻无码久久久影院 | 亚洲精品国偷拍自产在线麻豆 | 欧美性生交xxxxx久久久 | 午夜福利一区二区三区在线观看 | 中文字幕人妻无码一区二区三区 | 亚洲人成网站在线播放942 | 最新国产乱人伦偷精品免费网站 | 欧美日韩精品 | 国产一区二区三区四区五区加勒比 | 国产乱码精品一品二品 | av人摸人人人澡人人超碰下载 | 99久久久无码国产精品免费 | 亚洲人成人无码网www国产 | 国产内射爽爽大片视频社区在线 | 特大黑人娇小亚洲女 | 国产办公室秘书无码精品99 | 牛和人交xxxx欧美 | 欧美肥老太牲交大战 | 性开放的女人aaa片 | 无码中文字幕色专区 | 小泽玛莉亚一区二区视频在线 | 亚洲欧美国产精品专区久久 | 亚洲色成人中文字幕网站 | 日本饥渴人妻欲求不满 | 兔费看少妇性l交大片免费 | 亚洲精品中文字幕 | 日韩av无码一区二区三区 | 国内老熟妇对白xxxxhd | 性做久久久久久久久 | 久在线观看福利视频 | 少妇人妻偷人精品无码视频 | 色窝窝无码一区二区三区色欲 | 国产av一区二区三区最新精品 | 日本高清一区免费中文视频 | 男女猛烈xx00免费视频试看 | 色婷婷av一区二区三区之红樱桃 | a片免费视频在线观看 | 久久人人爽人人爽人人片ⅴ | 国产小呦泬泬99精品 | 亚洲精品欧美二区三区中文字幕 | 国产成人一区二区三区别 | 黑人巨大精品欧美一区二区 | 久久精品视频在线看15 | 精品国产一区二区三区四区在线看 | 国产午夜精品一区二区三区嫩草 | 中国女人内谢69xxxx | 国产精品手机免费 | 性生交片免费无码看人 | 九月婷婷人人澡人人添人人爽 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲国产精品一区二区第一页 | 午夜不卡av免费 一本久久a久久精品vr综合 | 久久婷婷五月综合色国产香蕉 | av人摸人人人澡人人超碰下载 | 国产色视频一区二区三区 | 日本欧美一区二区三区乱码 | 精品人人妻人人澡人人爽人人 | 亚洲日韩av一区二区三区中文 | 天堂а√在线中文在线 | 国产av一区二区三区最新精品 | 欧美人与动性行为视频 | 精品国产aⅴ无码一区二区 | 欧美真人作爱免费视频 | 国产乱人无码伦av在线a | 国产综合色产在线精品 | 露脸叫床粗话东北少妇 | 老子影院午夜精品无码 | 黑人玩弄人妻中文在线 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亲嘴扒胸摸屁股激烈网站 | 成在人线av无码免费 | 人妻少妇精品无码专区动漫 | 无码免费一区二区三区 | 丁香啪啪综合成人亚洲 | 国产午夜福利亚洲第一 | 强开小婷嫩苞又嫩又紧视频 | 日韩欧美中文字幕公布 | 亚洲国产成人av在线观看 | 日韩人妻少妇一区二区三区 | 日本一本二本三区免费 | 精品少妇爆乳无码av无码专区 | 婷婷五月综合缴情在线视频 | 国产精品多人p群无码 | 国产农村妇女高潮大叫 | 久久精品女人天堂av免费观看 | 男人扒开女人内裤强吻桶进去 | 99久久久国产精品无码免费 | 国产美女精品一区二区三区 | 亚洲男女内射在线播放 | 99久久精品无码一区二区毛片 | 荫蒂添的好舒服视频囗交 | 日本欧美一区二区三区乱码 | 国产疯狂伦交大片 | 婷婷丁香六月激情综合啪 | 国产成人精品无码播放 | 漂亮人妻洗澡被公强 日日躁 | 中国女人内谢69xxxx | 国产猛烈高潮尖叫视频免费 | 无遮挡国产高潮视频免费观看 | 亚洲最大成人网站 | 小鲜肉自慰网站xnxx | 日本熟妇人妻xxxxx人hd | 国产午夜福利亚洲第一 | 亚洲va中文字幕无码久久不卡 | 亚洲日韩精品欧美一区二区 | 中文毛片无遮挡高清免费 | 亚洲色大成网站www国产 | 最近中文2019字幕第二页 | 亚洲欧美中文字幕5发布 | 日韩人妻无码一区二区三区久久99 | 动漫av一区二区在线观看 | 国产亚洲视频中文字幕97精品 | 亚洲aⅴ无码成人网站国产app | 香蕉久久久久久av成人 | 色欲人妻aaaaaaa无码 | 久久久国产精品无码免费专区 | 精品国产福利一区二区 | 野外少妇愉情中文字幕 | 精品人妻人人做人人爽 | 中国大陆精品视频xxxx | 无码国产色欲xxxxx视频 | 人妻夜夜爽天天爽三区 | 少妇性荡欲午夜性开放视频剧场 | 青草青草久热国产精品 | 日韩亚洲欧美精品综合 | 精品国产精品久久一区免费式 | 大地资源网第二页免费观看 | 亚洲成a人片在线观看日本 | 永久免费观看美女裸体的网站 | 88国产精品欧美一区二区三区 | 55夜色66夜色国产精品视频 | 国产av一区二区精品久久凹凸 | 最近免费中文字幕中文高清百度 | 精品国产乱码久久久久乱码 | 丰满人妻一区二区三区免费视频 | 99久久亚洲精品无码毛片 | 欧美一区二区三区视频在线观看 | 亚洲日韩精品欧美一区二区 | 免费无码一区二区三区蜜桃大 | 老熟女重囗味hdxx69 | 日日碰狠狠丁香久燥 | 色婷婷综合激情综在线播放 | 宝宝好涨水快流出来免费视频 | 黄网在线观看免费网站 | 日本一区二区三区免费播放 | 国产精品欧美成人 | 国产在线无码精品电影网 | 丰满肥臀大屁股熟妇激情视频 | 精品人妻人人做人人爽夜夜爽 | 天天躁日日躁狠狠躁免费麻豆 | 久久天天躁狠狠躁夜夜免费观看 | 青青青手机频在线观看 | 精品无码成人片一区二区98 | 国产午夜无码精品免费看 | 水蜜桃av无码 | 亚洲自偷自拍另类第1页 | 欧美国产日韩久久mv | a片免费视频在线观看 | 中国女人内谢69xxxxxa片 | 亚洲色在线无码国产精品不卡 | 国产情侣作爱视频免费观看 | 任你躁国产自任一区二区三区 | 国产精品欧美成人 | 中文字幕日韩精品一区二区三区 | 亚洲乱亚洲乱妇50p | 亚洲 高清 成人 动漫 | 国产精品18久久久久久麻辣 | 国产精品美女久久久久av爽李琼 | 无码国产乱人伦偷精品视频 | 国产欧美亚洲精品a | 日本高清一区免费中文视频 | 国产女主播喷水视频在线观看 | 精品久久久中文字幕人妻 | 亚洲国产精品成人久久蜜臀 | 国产成人精品无码播放 | 成人精品视频一区二区三区尤物 | 曰韩无码二三区中文字幕 | а√天堂www在线天堂小说 | 亚洲乱码国产乱码精品精 | 国产av无码专区亚洲awww | 亚洲国产精品成人久久蜜臀 | 亚洲国产欧美国产综合一区 | 色欲久久久天天天综合网精品 | 无码av中文字幕免费放 | 一本久道久久综合婷婷五月 | 精品少妇爆乳无码av无码专区 | 色综合久久久无码中文字幕 | 牛和人交xxxx欧美 | 人妻互换免费中文字幕 | 欧美乱妇无乱码大黄a片 | 大肉大捧一进一出视频出来呀 | 亚洲gv猛男gv无码男同 | 国产熟妇另类久久久久 | 国产午夜亚洲精品不卡下载 | 久久午夜夜伦鲁鲁片无码免费 | 成人影院yy111111在线观看 | 日韩精品久久久肉伦网站 | 免费人成在线观看网站 | 波多野结衣乳巨码无在线观看 | 999久久久国产精品消防器材 | 亚洲一区av无码专区在线观看 | 婷婷色婷婷开心五月四房播播 | 少妇久久久久久人妻无码 | 日韩av激情在线观看 | 亚洲日韩中文字幕在线播放 | 久久午夜夜伦鲁鲁片无码免费 | www一区二区www免费 | 日本护士毛茸茸高潮 | 久久精品国产大片免费观看 | 日本爽爽爽爽爽爽在线观看免 | 国产成人精品一区二区在线小狼 | 久青草影院在线观看国产 | 国产成人一区二区三区在线观看 | 色综合久久中文娱乐网 | 国产乱人伦av在线无码 | 欧美自拍另类欧美综合图片区 | 人妻夜夜爽天天爽三区 | 精品偷自拍另类在线观看 | 88国产精品欧美一区二区三区 | 日韩少妇内射免费播放 | 精品国产福利一区二区 | 大乳丰满人妻中文字幕日本 | 狠狠躁日日躁夜夜躁2020 | 99精品国产综合久久久久五月天 | 麻豆人妻少妇精品无码专区 | 成人影院yy111111在线观看 | 午夜时刻免费入口 | 中国大陆精品视频xxxx | 18精品久久久无码午夜福利 | 人妻少妇精品视频专区 | 欧美性生交xxxxx久久久 | 久久久婷婷五月亚洲97号色 | 欧美成人高清在线播放 | 中文字幕无码日韩欧毛 | 纯爱无遮挡h肉动漫在线播放 | 久久久精品人妻久久影视 | 亚洲成av人片天堂网无码】 | 久久精品国产99精品亚洲 | √8天堂资源地址中文在线 | 999久久久国产精品消防器材 | 欧美国产日韩亚洲中文 | 亚洲欧洲无卡二区视頻 | 精品无码一区二区三区的天堂 | 日韩av无码一区二区三区 | 国产亚洲精品久久久ai换 | 国产农村乱对白刺激视频 | 人妻无码αv中文字幕久久琪琪布 | 国产一区二区三区四区五区加勒比 | 国産精品久久久久久久 | 两性色午夜免费视频 | 国产三级精品三级男人的天堂 | 无码人中文字幕 | 扒开双腿吃奶呻吟做受视频 | 无码av岛国片在线播放 | 久久午夜无码鲁丝片午夜精品 | 亚洲成色www久久网站 | 综合人妻久久一区二区精品 | 亚洲成av人影院在线观看 | 国产精品久久久久久无码 | 欧美阿v高清资源不卡在线播放 | 久久人人97超碰a片精品 | 国产偷国产偷精品高清尤物 | 丰满岳乱妇在线观看中字无码 | 小sao货水好多真紧h无码视频 | 亚洲精品久久久久久久久久久 | 性欧美videos高清精品 | 国产午夜精品一区二区三区嫩草 | 国产香蕉尹人综合在线观看 | 性啪啪chinese东北女人 | 一本久道高清无码视频 | 成人动漫在线观看 | 精品国产aⅴ无码一区二区 | 99久久久国产精品无码免费 | 色欲久久久天天天综合网精品 | 99久久无码一区人妻 | 中文字幕无码免费久久99 | 无遮无挡爽爽免费视频 | 中文字幕无码av波多野吉衣 | 国产精品视频免费播放 | 久久伊人色av天堂九九小黄鸭 | 免费人成在线观看网站 | 呦交小u女精品视频 | 伊人久久大香线蕉av一区二区 | 麻花豆传媒剧国产免费mv在线 | 国内少妇偷人精品视频 | 学生妹亚洲一区二区 | 婷婷五月综合激情中文字幕 | 亚洲色大成网站www国产 | 中文字幕久久久久人妻 | 国产一区二区三区四区五区加勒比 | 国产午夜亚洲精品不卡 | 一本色道久久综合狠狠躁 | 动漫av一区二区在线观看 | 久久精品无码一区二区三区 | 亚洲区欧美区综合区自拍区 | 亚洲国产av精品一区二区蜜芽 | 97久久国产亚洲精品超碰热 | 1000部啪啪未满十八勿入下载 | 久久亚洲精品成人无码 | 97久久国产亚洲精品超碰热 | 日本熟妇乱子伦xxxx | 日本精品少妇一区二区三区 | 国产性生交xxxxx无码 | 性色欲网站人妻丰满中文久久不卡 | 亚洲精品国产第一综合99久久 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品丝袜黑色高跟鞋 | 国产片av国语在线观看 | 18无码粉嫩小泬无套在线观看 | 国内精品九九久久久精品 | 国产一精品一av一免费 | 久久综合狠狠综合久久综合88 | 蜜臀aⅴ国产精品久久久国产老师 | 国产成人无码a区在线观看视频app | 日日麻批免费40分钟无码 | 天天摸天天碰天天添 | 亚洲精品中文字幕久久久久 | 亚洲国精产品一二二线 | 国产亚洲tv在线观看 | 国产综合在线观看 | 一个人看的www免费视频在线观看 | 久久精品国产日本波多野结衣 | 成人免费视频在线观看 | 国产亲子乱弄免费视频 | 67194成是人免费无码 | 成人无码视频在线观看网站 | 国产无av码在线观看 | 乱中年女人伦av三区 | 国产精品无码一区二区三区不卡 | 伊人久久大香线蕉午夜 | 99久久精品午夜一区二区 | 日韩欧美中文字幕公布 | 中文字幕乱码人妻无码久久 | 国产后入清纯学生妹 | 色欲综合久久中文字幕网 | 亚拍精品一区二区三区探花 | 欧美老妇交乱视频在线观看 | 亚洲综合在线一区二区三区 | 人妻尝试又大又粗久久 | 东京热一精品无码av | 亚洲欧美日韩综合久久久 | 红桃av一区二区三区在线无码av | 日本va欧美va欧美va精品 | 亚洲自偷精品视频自拍 | 欧美大屁股xxxxhd黑色 | 无码av免费一区二区三区试看 | 人妻与老人中文字幕 | 在线播放无码字幕亚洲 | 色偷偷人人澡人人爽人人模 | 精品一区二区三区无码免费视频 | 国产麻豆精品一区二区三区v视界 | 亚洲国产精品成人久久蜜臀 | 内射白嫩少妇超碰 | 丝袜美腿亚洲一区二区 | 性生交大片免费看女人按摩摩 | 精品无码av一区二区三区 | 97人妻精品一区二区三区 | 99久久久国产精品无码免费 | 国产精品亚洲专区无码不卡 | 亚洲伊人久久精品影院 | 又粗又大又硬毛片免费看 | 精品一区二区不卡无码av | 久久久国产精品无码免费专区 | 在线欧美精品一区二区三区 | 露脸叫床粗话东北少妇 | 99久久久国产精品无码免费 | 国产美女精品一区二区三区 | 国产尤物精品视频 | 黑人大群体交免费视频 | 奇米影视888欧美在线观看 | 国产高潮视频在线观看 | 午夜肉伦伦影院 | 久久久久免费精品国产 | 无码国内精品人妻少妇 | 国产av久久久久精东av | 丝袜美腿亚洲一区二区 | 国产精品久久久av久久久 | 精品无人区无码乱码毛片国产 | 亚洲va中文字幕无码久久不卡 | 撕开奶罩揉吮奶头视频 | 日日天干夜夜狠狠爱 | 玩弄人妻少妇500系列视频 | 国产成人无码av片在线观看不卡 | 日韩精品乱码av一区二区 | 97无码免费人妻超级碰碰夜夜 | 中文字幕日产无线码一区 | 我要看www免费看插插视频 | 久久aⅴ免费观看 | 强伦人妻一区二区三区视频18 | 国产精品国产自线拍免费软件 | 无码av中文字幕免费放 | 伦伦影院午夜理论片 | 无码成人精品区在线观看 | 疯狂三人交性欧美 | 国产综合色产在线精品 | 午夜性刺激在线视频免费 | 成人毛片一区二区 | 思思久久99热只有频精品66 | 国产成人无码a区在线观看视频app | 久久精品女人天堂av免费观看 | 国产精品美女久久久久av爽李琼 | 台湾无码一区二区 | 欧美日韩一区二区三区自拍 | 国精品人妻无码一区二区三区蜜柚 | 国产亚洲精品精品国产亚洲综合 | 内射爽无广熟女亚洲 | 欧美自拍另类欧美综合图片区 | 色欲综合久久中文字幕网 | 国产乱码精品一品二品 | 亚洲精品成a人在线观看 | 鲁大师影院在线观看 | 精品久久8x国产免费观看 | 国产人妻精品一区二区三区 | 日日噜噜噜噜夜夜爽亚洲精品 | 无码人妻出轨黑人中文字幕 | 成年美女黄网站色大免费全看 | 亚洲中文字幕久久无码 | 99久久精品日本一区二区免费 | 久久精品无码一区二区三区 | 熟女少妇在线视频播放 | 国产亚洲日韩欧美另类第八页 | 久久五月精品中文字幕 | 无码人妻出轨黑人中文字幕 | 亚洲人成人无码网www国产 | 亚洲一区av无码专区在线观看 | 亚洲精品午夜无码电影网 | 青青久在线视频免费观看 | 少妇性l交大片欧洲热妇乱xxx | 日韩人妻少妇一区二区三区 | 中文字幕无线码免费人妻 | 性生交片免费无码看人 | 亚洲伊人久久精品影院 | 亚洲色大成网站www | 精品成人av一区二区三区 | 国产在线无码精品电影网 | 亚洲国产综合无码一区 | 国产在线精品一区二区三区直播 | 熟女少妇人妻中文字幕 | 97精品人妻一区二区三区香蕉 | 国内精品一区二区三区不卡 | 亚洲精品一区二区三区在线观看 | 久热国产vs视频在线观看 | 亚洲一区二区三区四区 | 国产精品美女久久久久av爽李琼 | 人人妻人人澡人人爽人人精品浪潮 | 麻豆国产人妻欲求不满谁演的 | 国产极品美女高潮无套在线观看 | 国产成人精品三级麻豆 | 久久精品国产大片免费观看 | 国产午夜福利亚洲第一 | 在线 国产 欧美 亚洲 天堂 | 性欧美疯狂xxxxbbbb | 丰满诱人的人妻3 | 午夜福利试看120秒体验区 | 在线播放亚洲第一字幕 | 精品国偷自产在线视频 | 精品无码av一区二区三区 | 久久亚洲日韩精品一区二区三区 | 国产绳艺sm调教室论坛 | 国产高清不卡无码视频 | 亚洲人成影院在线观看 | 国产精品久久福利网站 | 无码帝国www无码专区色综合 | 无码国内精品人妻少妇 | 国产成人午夜福利在线播放 | 亚洲经典千人经典日产 | 亚洲精品中文字幕久久久久 | 亚洲国产一区二区三区在线观看 | 亚洲无人区一区二区三区 | 麻豆md0077饥渴少妇 | √8天堂资源地址中文在线 | 国产sm调教视频在线观看 | 亚洲精品国产精品乱码视色 | 日韩在线不卡免费视频一区 | 精品无码国产自产拍在线观看蜜 | 国产精品资源一区二区 | 国产精品久久久一区二区三区 | 国产亚洲精品久久久闺蜜 | 久久精品成人欧美大片 | 久久精品人人做人人综合试看 | 欧美黑人性暴力猛交喷水 | 综合人妻久久一区二区精品 | 国产精品怡红院永久免费 | 国产成人无码一二三区视频 | 动漫av一区二区在线观看 | 水蜜桃亚洲一二三四在线 | 国产精品嫩草久久久久 | 人人妻人人澡人人爽欧美精品 | 男女下面进入的视频免费午夜 | 久久人人爽人人爽人人片ⅴ | 中文字幕+乱码+中文字幕一区 | 一个人免费观看的www视频 | 欧美日韩视频无码一区二区三 | 亚洲色欲久久久综合网东京热 | 久久午夜无码鲁丝片 | 久久 国产 尿 小便 嘘嘘 | 日韩精品一区二区av在线 | 国产欧美精品一区二区三区 | 牲欲强的熟妇农村老妇女 | 久热国产vs视频在线观看 | 免费人成在线观看网站 | 国产精品久久久久7777 | 天堂亚洲2017在线观看 | 成人影院yy111111在线观看 | 永久免费观看美女裸体的网站 | 国产精品办公室沙发 | aⅴ在线视频男人的天堂 | 麻豆成人精品国产免费 | 国产三级精品三级男人的天堂 | 国产精品久久久av久久久 | 亚洲中文字幕无码中字 | 久久精品女人天堂av免费观看 | 精品久久久久久人妻无码中文字幕 | 在教室伦流澡到高潮hnp视频 | 国产亚洲美女精品久久久2020 | 99久久亚洲精品无码毛片 | 东京一本一道一二三区 | 俺去俺来也www色官网 | 亚洲中文字幕va福利 | 熟女少妇人妻中文字幕 | a在线亚洲男人的天堂 | 中文字幕乱码亚洲无线三区 | 未满成年国产在线观看 | 国产精品手机免费 | 狠狠综合久久久久综合网 | 亚洲 高清 成人 动漫 | 荫蒂被男人添的好舒服爽免费视频 | 无码av最新清无码专区吞精 | 无码人中文字幕 | 国产美女精品一区二区三区 | 日日摸日日碰夜夜爽av | 国产肉丝袜在线观看 | 午夜免费福利小电影 | 粉嫩少妇内射浓精videos | 99久久亚洲精品无码毛片 | 亚洲精品一区二区三区在线 | 丰满人妻被黑人猛烈进入 | 大地资源中文第3页 | 熟妇人妻无码xxx视频 | а√资源新版在线天堂 | 少妇被黑人到高潮喷出白浆 | 任你躁在线精品免费 | 人人爽人人爽人人片av亚洲 | 国产亚洲精品久久久久久 | 亚洲熟女一区二区三区 | 扒开双腿吃奶呻吟做受视频 | 中文毛片无遮挡高清免费 | 久久亚洲国产成人精品性色 | 粉嫩少妇内射浓精videos | 久久国产精品精品国产色婷婷 | 国产av一区二区三区最新精品 | 伊在人天堂亚洲香蕉精品区 | 熟妇人妻中文av无码 | 精品人人妻人人澡人人爽人人 | 中文字幕无码av波多野吉衣 | 国产精品理论片在线观看 | 亚洲成av人片在线观看无码不卡 | 欧美三级a做爰在线观看 | 成年女人永久免费看片 | 又色又爽又黄的美女裸体网站 | 久久99精品久久久久久动态图 | 成人一区二区免费视频 | 兔费看少妇性l交大片免费 | 国产人妻人伦精品1国产丝袜 | 国产一区二区不卡老阿姨 | 丝袜美腿亚洲一区二区 | 亚洲自偷自拍另类第1页 | 日韩精品无码一区二区中文字幕 | 亚洲中文字幕在线无码一区二区 | 最新国产麻豆aⅴ精品无码 | 色老头在线一区二区三区 | 成人试看120秒体验区 | 日本免费一区二区三区最新 | 无码国产激情在线观看 | 狠狠cao日日穞夜夜穞av | 久久精品无码一区二区三区 | 性开放的女人aaa片 | 欧美自拍另类欧美综合图片区 | 国产精品久久精品三级 | 狠狠躁日日躁夜夜躁2020 | 中文字幕无码av波多野吉衣 | 久久久亚洲欧洲日产国码αv | 成人免费视频在线观看 | 日韩av无码一区二区三区 | 国产成人精品无码播放 | 亚洲精品一区三区三区在线观看 | 成人性做爰aaa片免费看不忠 | 国产麻豆精品精东影业av网站 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 色欲久久久天天天综合网精品 | 人妻插b视频一区二区三区 | 国产免费久久久久久无码 | 欧美日韩色另类综合 | 亚洲爆乳大丰满无码专区 | 成人精品视频一区二区三区尤物 | 国产在热线精品视频 | 成人一区二区免费视频 | 国产精品鲁鲁鲁 | 色狠狠av一区二区三区 | 国产乱码精品一品二品 | 无码帝国www无码专区色综合 | 人人澡人人妻人人爽人人蜜桃 | 麻豆人妻少妇精品无码专区 | 亚洲一区二区三区 | 国产97在线 | 亚洲 | 国产午夜无码视频在线观看 | 强伦人妻一区二区三区视频18 | 在线成人www免费观看视频 | av香港经典三级级 在线 | 国产人妻精品一区二区三区不卡 | 自拍偷自拍亚洲精品被多人伦好爽 | 色婷婷综合中文久久一本 | 国产成人精品必看 | 日日碰狠狠丁香久燥 | 久久亚洲精品成人无码 | 无码人妻精品一区二区三区下载 | 狠狠综合久久久久综合网 | 国产成人综合美国十次 | 又大又紧又粉嫩18p少妇 | 又色又爽又黄的美女裸体网站 | 国产人成高清在线视频99最全资源 | 男人的天堂av网站 | 久久亚洲中文字幕精品一区 | 夜精品a片一区二区三区无码白浆 | 久久精品国产99精品亚洲 | 性色欲情网站iwww九文堂 | 久久精品国产一区二区三区肥胖 | 男女猛烈xx00免费视频试看 | 亚洲人成网站在线播放942 | 老司机亚洲精品影院 | 欧美一区二区三区 | 欧美激情综合亚洲一二区 | 亚洲成a人片在线观看日本 | 精品无码国产自产拍在线观看蜜 | 天天拍夜夜添久久精品大 | 无套内谢老熟女 | 色五月丁香五月综合五月 | 曰本女人与公拘交酡免费视频 | 性欧美疯狂xxxxbbbb | 曰韩少妇内射免费播放 | 国产精品美女久久久 | 国产后入清纯学生妹 | 久久久久av无码免费网 | 俺去俺来也www色官网 | 亚洲色无码一区二区三区 | 亚洲熟熟妇xxxx | 久激情内射婷内射蜜桃人妖 | 国产亚洲人成a在线v网站 | 日本在线高清不卡免费播放 | 久久精品无码一区二区三区 | 熟女少妇人妻中文字幕 | 久久精品一区二区三区四区 | 中国大陆精品视频xxxx | 成人无码精品一区二区三区 | 久久99精品久久久久婷婷 | 国产深夜福利视频在线 | 无码av免费一区二区三区试看 | www国产亚洲精品久久久日本 | 日本大乳高潮视频在线观看 | 思思久久99热只有频精品66 | 国产香蕉尹人综合在线观看 | 欧美亚洲日韩国产人成在线播放 | 亚洲色www成人永久网址 | 99国产精品白浆在线观看免费 | 在线精品亚洲一区二区 | 亚洲色欲色欲天天天www | 久久精品国产亚洲精品 | 国产精品美女久久久网av | 亚洲精品无码人妻无码 | 娇妻被黑人粗大高潮白浆 | 波多野结衣aⅴ在线 | 在线 国产 欧美 亚洲 天堂 | 无码人妻av免费一区二区三区 | 无码国模国产在线观看 | 国产在线精品一区二区三区直播 | 国产一区二区三区精品视频 | 无码国产激情在线观看 | 波多野结衣aⅴ在线 | 中文字幕无码乱人伦 | 日日橹狠狠爱欧美视频 | 性色欲网站人妻丰满中文久久不卡 | 中文字幕人成乱码熟女app | 真人与拘做受免费视频一 | 小泽玛莉亚一区二区视频在线 | 黄网在线观看免费网站 | 桃花色综合影院 | 成人免费无码大片a毛片 | 乱人伦人妻中文字幕无码 | 日韩精品无码免费一区二区三区 | 亚洲国产成人av在线观看 | 成熟人妻av无码专区 | 色综合久久久久综合一本到桃花网 | 强辱丰满人妻hd中文字幕 | 欧美成人午夜精品久久久 | 国产性生交xxxxx无码 | 特大黑人娇小亚洲女 | 国产国语老龄妇女a片 | 97无码免费人妻超级碰碰夜夜 | 蜜桃无码一区二区三区 | 久久精品成人欧美大片 | 中文字幕无码av波多野吉衣 | 麻花豆传媒剧国产免费mv在线 | 亚洲中文字幕在线观看 | 久久综合网欧美色妞网 | 男女下面进入的视频免费午夜 | 欧美激情一区二区三区成人 | 动漫av一区二区在线观看 | 日本丰满熟妇videos | 欧美freesex黑人又粗又大 | 国产精品.xx视频.xxtv | 激情内射日本一区二区三区 | 一个人免费观看的www视频 | 久久精品国产大片免费观看 | 精品国产一区二区三区av 性色 | 精品国产一区二区三区四区在线看 | 初尝人妻少妇中文字幕 | 精品亚洲成av人在线观看 | 日韩人妻无码中文字幕视频 | 成人精品视频一区二区三区尤物 | 九九久久精品国产免费看小说 | 亚洲国产成人a精品不卡在线 | 欧美乱妇无乱码大黄a片 | 日韩亚洲欧美中文高清在线 | 欧美自拍另类欧美综合图片区 | 国产成人综合色在线观看网站 | 久久久久久国产精品无码下载 | 激情内射亚州一区二区三区爱妻 | 午夜性刺激在线视频免费 | 亚洲欧美日韩国产精品一区二区 | 特级做a爰片毛片免费69 | 日本爽爽爽爽爽爽在线观看免 | 亚洲国产成人av在线观看 | 国产高清不卡无码视频 | 亚洲精品欧美二区三区中文字幕 | 国产精品二区一区二区aⅴ污介绍 | 国产99久久精品一区二区 | 国产熟女一区二区三区四区五区 | 亚洲精品中文字幕乱码 | 亚洲欧美日韩国产精品一区二区 | 欧美国产亚洲日韩在线二区 | 国产成人精品优优av | 久久久精品国产sm最大网站 | 亚洲日韩一区二区 | 国产精品美女久久久久av爽李琼 | 国产精品对白交换视频 | 熟妇人妻无码xxx视频 | 欧美精品一区二区精品久久 | 色五月丁香五月综合五月 | 国产综合在线观看 | 亚洲精品久久久久中文第一幕 | 色窝窝无码一区二区三区色欲 | 国精产品一区二区三区 | 亚洲码国产精品高潮在线 | 国精产品一区二区三区 | 国产在线精品一区二区三区直播 | 亚洲gv猛男gv无码男同 | 熟妇激情内射com | 97人妻精品一区二区三区 | 亚洲gv猛男gv无码男同 | 色 综合 欧美 亚洲 国产 | 国产高潮视频在线观看 | 亚洲理论电影在线观看 | 国产成人久久精品流白浆 | 久久99精品国产.久久久久 | 麻豆国产丝袜白领秘书在线观看 | 国产黄在线观看免费观看不卡 | 久久www免费人成人片 | 国产亚洲欧美在线专区 | 2019午夜福利不卡片在线 | 精品亚洲韩国一区二区三区 | 99久久精品日本一区二区免费 | 国产性生大片免费观看性 | 国产偷抇久久精品a片69 | 亚洲人成网站免费播放 | av无码不卡在线观看免费 | 成人欧美一区二区三区黑人免费 | 人妻熟女一区 | 国产午夜亚洲精品不卡下载 | 国产片av国语在线观看 | 午夜嘿嘿嘿影院 | 日日碰狠狠躁久久躁蜜桃 | 亚洲中文字幕无码中字 | 欧美xxxxx精品 | 福利一区二区三区视频在线观看 | 国产精品亚洲lv粉色 | 免费人成在线视频无码 | 亚洲の无码国产の无码影院 | 国内少妇偷人精品视频免费 | 久久国产36精品色熟妇 | 国内精品人妻无码久久久影院 | 无码国产乱人伦偷精品视频 | 少妇无套内谢久久久久 | 18禁止看的免费污网站 | 伊人久久大香线蕉亚洲 | 亚洲国产一区二区三区在线观看 | 人妻无码久久精品人妻 | 伊在人天堂亚洲香蕉精品区 | 国产成人无码区免费内射一片色欲 | 成人免费视频一区二区 | 久久精品国产精品国产精品污 | 久久久精品国产sm最大网站 | 亚洲成a人片在线观看无码 | 欧美人与牲动交xxxx | 伊人久久婷婷五月综合97色 | 欧美日本免费一区二区三区 | 精品人妻中文字幕有码在线 | 国产成人无码av片在线观看不卡 | 亚洲爆乳大丰满无码专区 | 久久亚洲精品中文字幕无男同 | 欧美人与动性行为视频 | 日日碰狠狠躁久久躁蜜桃 | 亚洲精品一区国产 | 亚洲自偷精品视频自拍 | 亚洲国精产品一二二线 | 国产99久久精品一区二区 | 大地资源网第二页免费观看 | 成人免费视频视频在线观看 免费 | 午夜丰满少妇性开放视频 | 国产精品国产自线拍免费软件 | 国产精品.xx视频.xxtv | 装睡被陌生人摸出水好爽 | 国产午夜精品一区二区三区嫩草 | 欧美人妻一区二区三区 | 在线天堂新版最新版在线8 | 亚洲爆乳无码专区 | 激情人妻另类人妻伦 | 98国产精品综合一区二区三区 | 草草网站影院白丝内射 | 亚洲精品久久久久久久久久久 | 国产另类ts人妖一区二区 | 少妇一晚三次一区二区三区 | 久久亚洲日韩精品一区二区三区 | 亚洲成在人网站无码天堂 | 亚洲a无码综合a国产av中文 | 日韩精品a片一区二区三区妖精 | 99久久精品无码一区二区毛片 | 欧美亚洲国产一区二区三区 | 成人欧美一区二区三区 | av无码久久久久不卡免费网站 | 亚洲国产高清在线观看视频 | 国产人妻人伦精品 | 国产两女互慰高潮视频在线观看 | 又粗又大又硬又长又爽 | 天干天干啦夜天干天2017 | 久久人人爽人人爽人人片av高清 | 最近的中文字幕在线看视频 | 玩弄人妻少妇500系列视频 | 国产精品无套呻吟在线 | 亚洲中文字幕成人无码 | 国产精品爱久久久久久久 | 天天av天天av天天透 | 久久伊人色av天堂九九小黄鸭 | 久久精品一区二区三区四区 | 最近中文2019字幕第二页 | 兔费看少妇性l交大片免费 | 最新国产乱人伦偷精品免费网站 | 国产成人无码午夜视频在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 18无码粉嫩小泬无套在线观看 | 国产熟妇高潮叫床视频播放 | 国产一区二区三区精品视频 | 18禁黄网站男男禁片免费观看 | 国产婷婷色一区二区三区在线 | 久久99国产综合精品 | 少妇性俱乐部纵欲狂欢电影 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国内精品一区二区三区不卡 | 国产精品人人妻人人爽 | 天天摸天天透天天添 | 老熟女重囗味hdxx69 | 亚洲国产精品一区二区美利坚 | 一本久道高清无码视频 | 欧美丰满少妇xxxx性 | 4hu四虎永久在线观看 | 国产免费无码一区二区视频 | 国产性生大片免费观看性 | 高潮毛片无遮挡高清免费 | 狠狠亚洲超碰狼人久久 | 国产精品丝袜黑色高跟鞋 | 色综合久久久无码中文字幕 | 亚洲成a人片在线观看无码3d | 亚洲男人av天堂午夜在 | 一本久久伊人热热精品中文字幕 | 国产精品成人av在线观看 | 久久国产精品萌白酱免费 | 日韩欧美中文字幕在线三区 | 亚无码乱人伦一区二区 | 午夜男女很黄的视频 | 久久99久久99精品中文字幕 | 99riav国产精品视频 | 在线成人www免费观看视频 | 午夜免费福利小电影 | 天堂一区人妻无码 | 国产午夜亚洲精品不卡 | 领导边摸边吃奶边做爽在线观看 | 亚洲呦女专区 | 亚洲区欧美区综合区自拍区 | 国产精品第一区揄拍无码 | 2020久久香蕉国产线看观看 | 奇米影视7777久久精品人人爽 | 国产xxx69麻豆国语对白 | 黑人巨大精品欧美黑寡妇 | 日韩精品乱码av一区二区 | 欧美丰满少妇xxxx性 | 99精品久久毛片a片 | 亚洲日韩乱码中文无码蜜桃臀网站 | www国产精品内射老师 | 麻豆人妻少妇精品无码专区 | 久久午夜无码鲁丝片秋霞 | 狠狠综合久久久久综合网 | 老司机亚洲精品影院无码 | 国产精品.xx视频.xxtv | 欧美 日韩 人妻 高清 中文 | 日本丰满熟妇videos | 免费人成网站视频在线观看 | 日本乱偷人妻中文字幕 | 风流少妇按摩来高潮 | 强伦人妻一区二区三区视频18 | 精品国产一区二区三区av 性色 | 狠狠色噜噜狠狠狠7777奇米 | 一个人看的www免费视频在线观看 | 国产亚av手机在线观看 | 亚洲自偷自偷在线制服 | 精品久久8x国产免费观看 | 国产网红无码精品视频 | 无码人妻久久一区二区三区不卡 | 日本在线高清不卡免费播放 | 无码人中文字幕 | 精品无码成人片一区二区98 | aa片在线观看视频在线播放 | 一本久道高清无码视频 | 天堂а√在线地址中文在线 | 精品午夜福利在线观看 | 国产精品久久久久影院嫩草 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲一区二区三区在线观看网站 | 国产精品二区一区二区aⅴ污介绍 | 无码吃奶揉捏奶头高潮视频 | 成年女人永久免费看片 | 丰满妇女强制高潮18xxxx | 日韩欧美群交p片內射中文 | 精品偷拍一区二区三区在线看 | 亚洲s色大片在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲人成网站免费播放 | 中文字幕无码热在线视频 | 国内老熟妇对白xxxxhd | 国产性生大片免费观看性 | 超碰97人人做人人爱少妇 | 老熟妇仑乱视频一区二区 | 亚洲人成人无码网www国产 | 国产欧美亚洲精品a | 无码国产激情在线观看 | 性欧美疯狂xxxxbbbb | 中文字幕av无码一区二区三区电影 | 亚洲中文字幕无码中文字在线 | 亚洲精品国产第一综合99久久 | 人妻有码中文字幕在线 | 国产av人人夜夜澡人人爽麻豆 | а√资源新版在线天堂 | 日韩亚洲欧美精品综合 | 国产一区二区三区精品视频 | 亚洲理论电影在线观看 | 久久这里只有精品视频9 | 国产猛烈高潮尖叫视频免费 | 国产欧美熟妇另类久久久 | 免费无码肉片在线观看 | 麻豆国产人妻欲求不满 | 捆绑白丝粉色jk震动捧喷白浆 | 成人精品视频一区二区三区尤物 | 国模大胆一区二区三区 | 美女张开腿让人桶 | 亚洲精品综合一区二区三区在线 | 丰满人妻精品国产99aⅴ | 亚洲精品国产品国语在线观看 | 久久久精品国产sm最大网站 | 国产精品va在线播放 | yw尤物av无码国产在线观看 | 精品亚洲韩国一区二区三区 | 蜜桃视频韩日免费播放 | 无码人妻精品一区二区三区不卡 | 中文无码精品a∨在线观看不卡 | 中文字幕乱码中文乱码51精品 | 欧美精品在线观看 | 扒开双腿吃奶呻吟做受视频 | 女高中生第一次破苞av | 国产人妻大战黑人第1集 | 国产一区二区三区四区五区加勒比 | 欧美 丝袜 自拍 制服 另类 | 日韩精品乱码av一区二区 | 亚洲国产一区二区三区在线观看 | 日本一区二区三区免费高清 | 永久黄网站色视频免费直播 | 中文亚洲成a人片在线观看 | 亚洲国产av精品一区二区蜜芽 | 四虎影视成人永久免费观看视频 | 亚洲 另类 在线 欧美 制服 | 成人片黄网站色大片免费观看 | 无码av中文字幕免费放 | 国产va免费精品观看 | 精品国产aⅴ无码一区二区 | 亚洲国产高清在线观看视频 | 1000部夫妻午夜免费 | 中文字幕日产无线码一区 | 超碰97人人做人人爱少妇 | 妺妺窝人体色www婷婷 | 5858s亚洲色大成网站www | 人妻少妇被猛烈进入中文字幕 | 欧美一区二区三区视频在线观看 | 国产亚洲精品久久久ai换 | 帮老师解开蕾丝奶罩吸乳网站 | 成人亚洲精品久久久久软件 | 亚洲色成人中文字幕网站 | 国产精品人人妻人人爽 | 老太婆性杂交欧美肥老太 | 十八禁真人啪啪免费网站 | 日本乱偷人妻中文字幕 | 青春草在线视频免费观看 | 一本久道久久综合狠狠爱 | 久久人妻内射无码一区三区 | 欧美乱妇无乱码大黄a片 | 国产成人精品三级麻豆 | 水蜜桃av无码 | 亚洲精品一区二区三区大桥未久 | 国产三级久久久精品麻豆三级 | 亚洲日韩一区二区 | 亚洲の无码国产の无码步美 | 亚洲精品www久久久 | 清纯唯美经典一区二区 | 亚洲精品欧美二区三区中文字幕 | 久久精品视频在线看15 | 成熟妇人a片免费看网站 | 亚洲精品一区二区三区大桥未久 | 国产精品毛片一区二区 | 丰满岳乱妇在线观看中字无码 | 天天综合网天天综合色 | 无码av免费一区二区三区试看 | 四虎影视成人永久免费观看视频 | 老熟妇仑乱视频一区二区 | 欧美国产日韩久久mv | 亚洲伊人久久精品影院 | 国产另类ts人妖一区二区 | 午夜福利一区二区三区在线观看 | 久久99国产综合精品 | 国产精品a成v人在线播放 | 亚洲一区二区三区偷拍女厕 | a在线亚洲男人的天堂 | 丰满妇女强制高潮18xxxx | 亚洲精品国产a久久久久久 | 久久亚洲中文字幕无码 | 又粗又大又硬毛片免费看 | 亚洲一区二区三区国产精华液 | 久久精品中文字幕大胸 | 免费看男女做好爽好硬视频 | 欧美丰满少妇xxxx性 | 99国产精品白浆在线观看免费 | 亚洲国产欧美国产综合一区 | 一本色道久久综合狠狠躁 | 久久久久av无码免费网 | 成人欧美一区二区三区黑人免费 | 国内精品人妻无码久久久影院 | av小次郎收藏 | 97资源共享在线视频 | 一本久道久久综合狠狠爱 | av无码不卡在线观看免费 | 高潮毛片无遮挡高清免费视频 | 日本免费一区二区三区最新 | 成人欧美一区二区三区 | 高清无码午夜福利视频 | 国产成人综合美国十次 | 欧美熟妇另类久久久久久不卡 | 九九热爱视频精品 | 久久久无码中文字幕久... | 国产人妻精品一区二区三区不卡 | 99麻豆久久久国产精品免费 | 亚洲成熟女人毛毛耸耸多 | 曰韩无码二三区中文字幕 | 国内综合精品午夜久久资源 | 亚洲成av人片天堂网无码】 | 亚洲欧美日韩成人高清在线一区 | 亚洲狠狠色丁香婷婷综合 | 婷婷丁香五月天综合东京热 | 亚洲无人区一区二区三区 | 亚洲伊人久久精品影院 | 亚洲精品国产精品乱码不卡 | 一本大道久久东京热无码av | 性开放的女人aaa片 | 人妻天天爽夜夜爽一区二区 | 好爽又高潮了毛片免费下载 | 极品尤物被啪到呻吟喷水 | 最近免费中文字幕中文高清百度 | 人妻aⅴ无码一区二区三区 | 亚洲精品国偷拍自产在线观看蜜桃 | 丁香啪啪综合成人亚洲 | 欧美精品在线观看 | 亚洲男人av香蕉爽爽爽爽 | 日韩精品久久久肉伦网站 | 国产精品办公室沙发 | 18精品久久久无码午夜福利 | 大屁股大乳丰满人妻 | 成年女人永久免费看片 | 国产乱人伦av在线无码 | 搡女人真爽免费视频大全 | 亚洲日韩中文字幕在线播放 | 国产亚洲人成a在线v网站 | 国产无遮挡又黄又爽免费视频 | 亚洲 激情 小说 另类 欧美 | 国产凸凹视频一区二区 | 99久久人妻精品免费一区 | 丰满少妇女裸体bbw | 亚洲区小说区激情区图片区 | 亚洲国产精品一区二区美利坚 | 午夜熟女插插xx免费视频 | 学生妹亚洲一区二区 | 国产国语老龄妇女a片 | 永久免费观看美女裸体的网站 | 99er热精品视频 | 久久97精品久久久久久久不卡 | 欧美亚洲国产一区二区三区 | 成人aaa片一区国产精品 | 99riav国产精品视频 | av人摸人人人澡人人超碰下载 | 内射巨臀欧美在线视频 | 精品偷拍一区二区三区在线看 | 丰满护士巨好爽好大乳 | 综合激情五月综合激情五月激情1 | 亚洲综合在线一区二区三区 | 亚洲 高清 成人 动漫 | 久久午夜无码鲁丝片秋霞 | 无码帝国www无码专区色综合 | 亚洲欧美精品aaaaaa片 | 一本色道久久综合狠狠躁 | 亚洲欧洲日本无在线码 | 亚洲日本va中文字幕 | 最新国产麻豆aⅴ精品无码 | 亚洲精品久久久久久久久久久 | av无码久久久久不卡免费网站 | 又大又硬又爽免费视频 | 久久国产精品偷任你爽任你 | 国产成人av免费观看 | 欧美老人巨大xxxx做受 | 久久99国产综合精品 | 中文字幕无码免费久久99 | 少妇被粗大的猛进出69影院 | 久久久精品国产sm最大网站 | 欧美日韩一区二区三区自拍 | 国产精品美女久久久 | 国产超级va在线观看视频 | 日本精品少妇一区二区三区 | 成熟女人特级毛片www免费 | 人妻插b视频一区二区三区 | 99久久久无码国产精品免费 | 高潮毛片无遮挡高清免费 | 88国产精品欧美一区二区三区 | 人人妻人人澡人人爽欧美一区九九 | 日产精品99久久久久久 | 乌克兰少妇xxxx做受 | 在线a亚洲视频播放在线观看 | 日本肉体xxxx裸交 | 精品人妻人人做人人爽夜夜爽 | 国产区女主播在线观看 | 欧美精品在线观看 | 青春草在线视频免费观看 | 老司机亚洲精品影院 | 久久人妻内射无码一区三区 | 日本大香伊一区二区三区 | 亚洲国产一区二区三区在线观看 | 十八禁真人啪啪免费网站 | 国产区女主播在线观看 | 水蜜桃av无码 | 香港三级日本三级妇三级 | 亚洲综合久久一区二区 | 亚洲精品中文字幕 | 亚洲人成影院在线无码按摩店 | 四虎永久在线精品免费网址 | 欧美国产亚洲日韩在线二区 | 2019午夜福利不卡片在线 | 亚洲成av人综合在线观看 | 久久精品女人的天堂av | 特大黑人娇小亚洲女 | 国产亚洲欧美日韩亚洲中文色 | 日韩亚洲欧美中文高清在线 | 俄罗斯老熟妇色xxxx | 亚洲热妇无码av在线播放 | 精品无人国产偷自产在线 | 性开放的女人aaa片 | 午夜无码区在线观看 | 中文字幕日韩精品一区二区三区 | 国产精品美女久久久久av爽李琼 | 精品国产av色一区二区深夜久久 | ass日本丰满熟妇pics | 久久久久久a亚洲欧洲av冫 | av无码久久久久不卡免费网站 | 无码av免费一区二区三区试看 | 日本一区二区三区免费高清 | 久久久中文字幕日本无吗 | 国产精品无码一区二区桃花视频 | 日韩av无码一区二区三区不卡 | 久久人人97超碰a片精品 | 国产黄在线观看免费观看不卡 | 日本免费一区二区三区最新 | aⅴ在线视频男人的天堂 | 中文字幕日产无线码一区 | 特级做a爰片毛片免费69 | 欧美亚洲国产一区二区三区 | 国产精品毛多多水多 | 国产精品久久久久久久9999 | 天海翼激烈高潮到腰振不止 | 欧美日韩综合一区二区三区 | 无码毛片视频一区二区本码 | 日本精品高清一区二区 | 国产深夜福利视频在线 | 久热国产vs视频在线观看 | 中文字幕乱妇无码av在线 | 女人色极品影院 | 国产乡下妇女做爰 | 欧美日韩综合一区二区三区 | 18禁黄网站男男禁片免费观看 | av人摸人人人澡人人超碰下载 | 亚洲 另类 在线 欧美 制服 | 国产成人无码一二三区视频 | 狠狠躁日日躁夜夜躁2020 | 久久五月精品中文字幕 | 老熟女乱子伦 | 亚洲爆乳精品无码一区二区三区 | 久久精品国产日本波多野结衣 | 国产精品爱久久久久久久 | 亚洲欧美日韩综合久久久 | 成人亚洲精品久久久久软件 | 午夜成人1000部免费视频 | 国产亚洲精品久久久闺蜜 | 好爽又高潮了毛片免费下载 | 日本肉体xxxx裸交 | 少妇高潮喷潮久久久影院 | 在教室伦流澡到高潮hnp视频 | 中文字幕日产无线码一区 | 亚洲日本在线电影 | 亚洲精品www久久久 | 欧美freesex黑人又粗又大 | 国产精品高潮呻吟av久久4虎 | 亚洲乱码日产精品bd | 亚洲日本一区二区三区在线 | 免费人成在线视频无码 | 强伦人妻一区二区三区视频18 | 巨爆乳无码视频在线观看 | 国产又爽又猛又粗的视频a片 | 免费网站看v片在线18禁无码 | 在线欧美精品一区二区三区 | 久久精品国产一区二区三区 | 少妇厨房愉情理9仑片视频 | 中文字幕精品av一区二区五区 | 波多野结衣av一区二区全免费观看 | 国产高潮视频在线观看 | 国产精品高潮呻吟av久久4虎 | www国产亚洲精品久久久日本 | 日本xxxx色视频在线观看免费 | 中文无码成人免费视频在线观看 | 日韩av无码一区二区三区不卡 | v一区无码内射国产 | 夜先锋av资源网站 | 国产精品亚洲一区二区三区喷水 | 亚洲精品欧美二区三区中文字幕 | 国产成人精品视频ⅴa片软件竹菊 | 97久久精品无码一区二区 | 国产超碰人人爽人人做人人添 | 国产成人午夜福利在线播放 | 午夜性刺激在线视频免费 | 色欲人妻aaaaaaa无码 | 精品人人妻人人澡人人爽人人 | 国产成人精品一区二区在线小狼 | 亚洲欧美日韩成人高清在线一区 | 波多野42部无码喷潮在线 | 18禁止看的免费污网站 | 久久久久av无码免费网 | 亚拍精品一区二区三区探花 | 国产乱子伦视频在线播放 | 久久熟妇人妻午夜寂寞影院 | 学生妹亚洲一区二区 | 国产肉丝袜在线观看 | 少妇被粗大的猛进出69影院 | 少妇的肉体aa片免费 | 无码国产色欲xxxxx视频 | 大地资源中文第3页 | 国产色xx群视频射精 | 精品一区二区三区无码免费视频 | 亚洲码国产精品高潮在线 | 国产成人无码av在线影院 | 日韩无码专区 | 久久久精品欧美一区二区免费 | 国产婷婷色一区二区三区在线 | 国产精品美女久久久久av爽李琼 | 麻花豆传媒剧国产免费mv在线 | 中文字幕无线码 | 亚洲乱亚洲乱妇50p | 国产精品亚洲专区无码不卡 | 国产 浪潮av性色四虎 | 欧美性生交活xxxxxdddd | 国产绳艺sm调教室论坛 | 久久精品国产亚洲精品 | 丰满妇女强制高潮18xxxx | 人人妻人人澡人人爽欧美一区九九 | 天天摸天天碰天天添 | 国产精品久久久久无码av色戒 | 亚洲精品中文字幕久久久久 | 国产精品18久久久久久麻辣 | 四虎影视成人永久免费观看视频 | 国产精品第一区揄拍无码 | 亚洲中文字幕在线无码一区二区 | 四虎影视成人永久免费观看视频 | 日本爽爽爽爽爽爽在线观看免 | 色综合久久中文娱乐网 | 狠狠色欧美亚洲狠狠色www | 久久99精品久久久久久动态图 | 一本久久a久久精品vr综合 | 精品国产一区二区三区av 性色 | 又大又紧又粉嫩18p少妇 | 无码人妻精品一区二区三区下载 | 黑人粗大猛烈进出高潮视频 | 熟女少妇在线视频播放 | 久久久久免费精品国产 | 国产精品久久国产三级国 | 天天综合网天天综合色 | 波多野42部无码喷潮在线 | a国产一区二区免费入口 | 成人毛片一区二区 | 纯爱无遮挡h肉动漫在线播放 |