簡體   English   中英

觸摸視圖時的“奇怪”行為

[英]“Odd” Behavior When Touching Views

我在玩意見。 我的申請很簡單:

  1. 我有一個自定義視圖控制器及其相關視圖,稱之為mainView。 我的自定義視圖控制器會覆蓋touchesBegan方法。 我的touchesBegan方法為觸摸的視圖添加邊框,並從先前觸摸的視圖中刪除邊框(如果有)。 因此,我可以直觀地看到最后觸摸的視圖。

     override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { print("There are \\(touches.count) touch(es)") if let selectedView = self.selectedView { selectedView.borderWidth = 0 } self.selectedView = touches.first?.view if let selectedView = self.selectedView { selectedView.borderColor = UIColor.blackColor() selectedView.borderWidth = 2 } 

    }

  2. 在主視圖中我添加了一個子視圖,稱之為subView。

  3. 對於subView,我添加了2個子視圖,稱之為subSubView1和subSubView2。

在此輸入圖像描述

當我觸摸視圖時,他們的邊界會像我期望的那樣出現和消失。 但是,如果我重新定位subSubView1(或subSubView2)使其部分位於subView內部並且部分位於subView之外,則行為將變為“奇數”。 如果我觸摸subSubView1與subView重疊的部分,則subSubView1接收邊框。 如果我觸摸與mainView重疊的subSubView1部分,那么接收邊框的是mainView。 請有人幫我理解這種行為嗎?

Xcode 7.3,使用iPhone 6模擬器進行調試。

如果視圖位於其父級之外,則該視圖不可選。 我會假設觸摸事件從底部冒出來(mainView)。 然后它轉到mainView的孩子們。 如果觸摸不在該孩子中則停止。 因此,子視圖中不在其父級中的部分將不會接收不在其父級中的觸摸事件。

有關更多信息,請參閱此問題

如果鏈接位於登錄牆后面,則復制文本。

問:我的視圖在屏幕上正確顯示,但沒有收到任何觸摸事件。 這是為什么?

答:此問題的最常見原因是因為您的視圖位於其父視圖的邊界之外。 當您的應用程序收到觸摸事件時,將啟動命中測試過程以確定應該接收事件的視圖。 該過程從視圖層次結構的根開始,通常是應用程序的窗口,並按前后順序搜索子視圖,直到找到觸摸下的最前面的視圖。 該視圖成為命中測試視圖並接收觸摸事件。 此過程中涉及的每個視圖首先測試事件位置是否在其范圍內。 只有在測試成功后,視圖才會將事件傳遞給子視圖以進行進一步的命中測試。 因此,如果您的視圖處於觸摸狀態但位於其父視圖邊界之外,則父視圖將無法測試事件位置,也不會將觸摸事件傳遞給您的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM