2015-10-18 65 views
0

在Swift 2中,我有touchesBegan方法與Set<UITouch>。現在,在方法中,我想檢查它是否是水龍頭/觸摸,3D觸摸..Swift 2:檢查觸摸的類型Begin

我嘗試在第一個UITouch上使用.phase,但結果什麼也沒有。我將如何檢查用戶做了什麼樣的觸摸?

回答

1

您無法單獨查看touchesBegan。該方法僅在用戶第一次觸摸屏幕時調用。系統無法知道此後會發生什麼(如果用戶再次舉起手指,或者他移動手指,或者他用力按下等)。

你還必須看看touchesMovedtouchesEnded並檢查發生了什麼。

例如:

1)所述的觸摸是點擊如果觸摸locationInView屬性是或多或少在touchesBegantouchesEnded相同。這將不完全相同,因爲即使用戶剛剛點擊屏幕,手指也會移動一點點。

2)所述的觸摸是滑動如果觸摸locationInView屬性是touchesBegantouchesEnded不同。

3)如果touch的「force」屬性大於某個值,觸摸是ForceTouch。這隻在touchesMoved中可見。在touchesBeganforce屬性將始終爲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

+0

謝謝你的非常詳細的答案!那麼我怎麼去註冊一個** ForceTouch **然後採取行動呢? 我不想執行'peek和pop'或'quick actions',但我希望我的視圖能夠響應** Tap **或** ForceTouch **,然後執行某些操作。 – jbehrens94

+0

我已經爲我的答案添加了一個示例。 – joern