在Swift 2中,我有touchesBegan
方法與Set<UITouch>
。現在,在方法中,我想檢查它是否是水龍頭/觸摸,3D觸摸..Swift 2:檢查觸摸的類型Begin
我嘗試在第一個UITouch
上使用.phase
,但結果什麼也沒有。我將如何檢查用戶做了什麼樣的觸摸?
在Swift 2中,我有touchesBegan
方法與Set<UITouch>
。現在,在方法中,我想檢查它是否是水龍頭/觸摸,3D觸摸..Swift 2:檢查觸摸的類型Begin
我嘗試在第一個UITouch
上使用.phase
,但結果什麼也沒有。我將如何檢查用戶做了什麼樣的觸摸?
您無法單獨查看touchesBegan
。該方法僅在用戶第一次觸摸屏幕時調用。系統無法知道此後會發生什麼(如果用戶再次舉起手指,或者他移動手指,或者他用力按下等)。
你還必須看看touchesMoved
和touchesEnded
並檢查發生了什麼。
例如:
1)所述的觸摸是點擊如果觸摸locationInView
屬性是或多或少在touchesBegan
和touchesEnded
相同。這將不完全相同,因爲即使用戶剛剛點擊屏幕,手指也會移動一點點。
2)所述的觸摸是潘或滑動如果觸摸locationInView
屬性是touchesBegan
和touchesEnded
不同。
3)如果touch的「force」屬性大於某個值,觸摸是ForceTouch。這隻在touchesMoved
中可見。在touchesBegan
force
屬性將始終爲0
。當然force
只會在提供該功能的設備上可用。
如果要檢測ForceTouch自己,你可以做這樣的:
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
guard let touch = touches.first else { return }
if traitCollection.forceTouchCapability == .Available {
if touch.force == touch.maximumPossibleForce {
print("This is a force touch")
}
}
}
要知道,這是隻要不斷地爲用戶按下屏幕調用。如果您想要在檢測到強制觸摸時執行一次代碼,則必須注意只能執行一次代碼,直至調用touchesEnded
。
謝謝你的非常詳細的答案!那麼我怎麼去註冊一個** ForceTouch **然後採取行動呢? 我不想執行'peek和pop'或'quick actions',但我希望我的視圖能夠響應** Tap **或** ForceTouch **,然後執行某些操作。 – jbehrens94
我已經爲我的答案添加了一個示例。 – joern