日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS开发触摸事件的传递

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS开发触摸事件的传递 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. iOS中的三種事件類型 觸摸事件、加速計事件、遠程事件。

觸摸事件:通過觸摸、手勢進行觸發(例如手指點擊、縮放)

加速計事件:通過加速器進行觸發(例如手機晃動,典型應用是微信搖一搖)

遠程事件:通過其他遠程設備觸發(例如耳機控制按鈕)

觸摸事件的實現方法有四種,touchBegin/touchesMoved/touchesEnded/touchesCancelled

2. 觸摸事件的傳遞

  要想響應觸摸事件必須得有一個前提,就是該對象必須是響應者對象,繼承了UIResponder的對象就是響應者對象,只有響應者對象才能夠接收并處理事件

(1)事件是怎么的產生和傳遞"

①.當手指觸摸屏幕后會產生 '觸摸事件', 然后將事件加入UIApplication的管理事件隊列中

②.UIApplication會取出事件隊列中 '最前面的事件' 分發下去,事先分發給應用程序的主窗口中 'keyWindow'

③.主窗口接收到事件后,分發給自己的子控件,尋找最適合的接收事件的控件

④.找到 '最適合' 接收的控件后,調用控件的touchesBegin/touchesMoved/touchesEnded方法

"2、如何找到最合適的控件來處理事件?"

①.判斷自己是否能接收觸摸事件?

? /*

?? 控件不接收觸摸事件的三種情況

?? 1> 不接收用戶交互 userInteractionEnabled=NO

?? 2> 隱藏 hidden = YES

?? 3> 透明 alpha = 0.0 ~ 0.01

?? */

②.判斷觸摸點是否在自己身上?

?? /*

? ? * 判斷觸摸點在不在自己身上,view有一個方法【-(BOOL)pointInside:withEvent:】

? ? * 返回NO,就代表不在自己身邊上,那不再遍歷子控件

? ? * 返回YES,代表點在自己向上,那繼續遍歷子控件

? ? */

③.從后往前遍歷子控件,重復前面的兩個步驟

④.如果沒有符合條件的子控件,那么就自己最適合處理的控件

⑤.找到最適合的控件后就調用touchesBegin/touchesMoved/touchesEnded方法

?(2)響應者鏈條

"什么是響應者鏈條"

①.由多個響應者對象連接起來的鏈條叫做響應者鏈條

②.什么是上一個響應者?

?? >如果當前這個view是控制器的view,控制器就是上一個響應者

?? >如果當前這個view不是控制器的view,那么父控件就是上一個響應者

?

③.利用響應者鏈條可以讓多個控件處理同一個 "觸摸事件"

?? "怎么讓多個控件處理同一個 ‘觸摸事件’ 事件?"

?? >在最后適合的控件里調用super的touchesBegan方法,這樣就將事件傳給上一個響應,上一個響應者也可以處理事件了

?

?

"3、小結:事件的完整處理過程"

①.先將事件對象由上往下傳遞(由父控制傳給子控件),找到最適合的控件來處理

②.調用最合適的控件的touches...方法

③.如果調用了[super touch…],就會將事件順著響應都鏈往上傳遞,傳遞給上一個響應者

④.接著上一個響應者就會調用的touches...方法

⑤.如果沒有找到最適合的控件來處理事件,則將事件傳回來窗口,窗口不處理事件,將事件傳給UIApplication

⑥.如果Applicatoin不能處理事件,則將其丟棄

?

轉載于:https://www.cnblogs.com/xiaofei993/p/5344995.html

總結

以上是生活随笔為你收集整理的iOS开发触摸事件的传递的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。