當用戶處于捏合手勢程序中時,您如何僅接受平移手勢?換句話說,我想避免提供單指平移手勢。
@IBAction func pinchPiece(_ pinchGestureRecognizer: UIPinchGestureRecognizer) {
guard pinchGestureRecognizer.state == .began || pinchGestureRecognizer.state == .changed,
let piece = pinchGestureRecognizer.view else {
// After pinch releases, zoom back out.
if pinchGestureRecognizer.state == .ended {
UIView.animate(withDuration: 0.3, animations: {
pinchGestureRecognizer.view?.transform = CGAffineTransform.identity
})
}
return
}
adjustAnchor(for: pinchGestureRecognizer)
let scale = pinchGestureRecognizer.scale
piece.transform = piece.transform.scaledBy(x: scale, y: scale)
pinchGestureRecognizer.scale = 1 // Clear scale so that it is the right delta next time.
}
@IBAction func panPiece(_ panGestureRecognizer: UIPanGestureRecognizer) {
guard panGestureRecognizer.state == .began || panGestureRecognizer.state == .changed,
let piece = panGestureRecognizer.view else {
return
}
let translation = panGestureRecognizer.translation(in: piece.superview)
piece.center = CGPoint(x: piece.center.x translation.x, y: piece.center.y translation.y)
panGestureRecognizer.setTranslation(.zero, in: piece.superview)
}
public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
true
}
uj5u.com熱心網友回復:
你可以使用 require(toFail:)
例如,如果你有兩個手勢tap和swipe
輕掃手勢是輕敲,然后是線性運動,而輕敲只是輕敲——在檢查輕敲手勢之前,我們需要確保輕掃手勢絕對沒有被識別器識別。
iOS 通常在這方面做得相當好,但沒有必要讓它碰運氣:如果你在點擊手勢識別器上呼叫 require(toFail:),傳入滑動識別器,iOS 肯定會確保它們不會競爭:
let swipe = UISwipeGestureRecognizer(target: self, action: #selector(executeSwipe))
let tap = UITapGestureRecognizer(target: self, action: #selector(executeTap))
view.addGestureRecognizer(swipe)
view.addGestureRecognizer(tap)
tap.require(toFail: swipe)
uj5u.com熱心網友回復:
您可以輕松啟用和禁用您的手勢。當它開始捏合時禁用平移手勢并在它結束捏合時啟用它。當它開始平移時禁用捏合手勢并在結束平移時啟用它。
@IBAction func pinchPiece(_ pinchGestureRecognizer: UIPinchGestureRecognizer) {
guard pinchGestureRecognizer.state == .began || pinchGestureRecognizer.state == .changed,
let piece = pinchGestureRecognizer.view else {
yourPangesture.isEnable = false // Disable Pangesture
// After pinch releases, zoom back out.
if pinchGestureRecognizer.state == .ended {
UIView.animate(withDuration: 0.3, animations: {
pinchGestureRecognizer.view?.transform = CGAffineTransform.identity
})
}
return
}
if pinchGestureRecognizer.state == .end {
yourPangesture.isEnable = true // Enabling again
}
adjustAnchor(for: pinchGestureRecognizer)
let scale = pinchGestureRecognizer.scale
piece.transform = piece.transform.scaledBy(x: scale, y: scale)
pinchGestureRecognizer.scale = 1 // Clear scale so that it is the right delta next time.
}
對 panPiece 功能執行相同操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370543.html
上一篇:如何在EurekaSelectableSection上進行適當的反應式擴展
下一篇:未能產生表達診斷;請提交錯誤報告
