在我的最后一個問題中,我學會了在游戲上放置一個計時器,這樣在點擊開始按鈕后,用戶必須等待幾秒鐘才能觸摸螢屏。該代碼如下所示:
self.view?.isUserInteractionEnabled = false
DispatchQueue.main.asyncAfter(deadline: .now() 4.0) {
self.view?.isUserInteractionEnabled = true
}
我保留了最后一個帖子以供其他人學習。這次我想知道您將如何在按下按鈕之前完全不允許觸摸!我將上面的 true 陳述句切換為“false”,因此用戶在第一次進入游戲時無法觸摸。但是,我希望用戶能夠單擊開始按鈕,然后在游戲程序中允許所有其他觸摸。謝謝!
uj5u.com熱心網友回復:
一個非常簡單的方法是創建一個 UIView 的子類來覆寫func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?.
然后,您只需在將事件轉發到其他子視圖之前檢查按鈕是否已被按下。
class View: UIView {
private var hasTappedButton = false
let button = UIButton()
override init(frame: CGRect) {
super.init(frame: frame)
configureButton()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
configureButton()
}
private func configureButton() {
button.addTarget(self, action: #selector(tappedButton), for: .touchUpInside)
}
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
let view = super.hitTest(point, with: event)
guard !hasTappedButton else { return view }
return view == button ? button : nil
}
@objc private func tappedButton() {
hasTappedButton = true
}
}
uj5u.com熱心網友回復:
我希望用戶能夠點擊開始按鈕,然后在游戲程序中允許所有其他觸摸
我的解決方案是在整個界面前面放置一個不可見的視圖并使用命中測驗 munging 以便它后面只有一個視圖(self.passthruView,您的按鈕)是可觸摸的:
class MyView: UIView {
weak var passthruView : UIView?
override func hitTest(_ point: CGPoint, with e: UIEvent?) -> UIView? {
if let pv = self.passthruView {
let pt = pv.convert(point, from: self)
if pv.point(inside: pt, with: e) {
return nil
}
}
return super.hitTest(point, with: e)
}
}
所以只要 MyView 坐在(不可見的)整個界面的前面,就只有按鈕可以被觸摸。然后你拿掉 MyView,整個界面又變得可觸摸了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341769.html
