メインUIにプログラムでビューを作成できるボタンがあります。それは一番下にあります。私はPanGestureRecognizerを使って動き回ることができる緑色の円として出てきます。ダブルタップ感知器とスウィフトフローを使用してパンジェスド認識器をオフにする
私の目標は、TapGestureRecognizerを使用してPanGestureRecognizerをオフにすることです(私はダブルタップにしたいと思います)。
これはこれまでのコードです。ビューをタップすると実際に色が変わりますが、PanGestureRecognizerを参照して無効にする方法はわかりません。
class MakeACircle: UIView {
var circleCenter = CGPoint()
let tap = UITapGestureRecognizer()
let panGesture = UIPanGestureRecognizer()
var checkSomething = 1
init() {
super.init(frame: CGRect(x: 0.0, y: 0.0, width: 100, height: 100))
self.layer.cornerRadius = 50.0
self.backgroundColor = UIColor.green
self.isUserInteractionEnabled = true
UITapGestureRecognizer().numberOfTapsRequired = 2
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func dragCircle(gesture: UIPanGestureRecognizer) {
let target = gesture.view!
switch gesture.state {
case .began, .ended:
circleCenter = target.center
case .changed:
let translation = gesture.translation(in: self.superview)
target.center = CGPoint(x: circleCenter.x + translation.x, y: circleCenter.y + translation.y)
default: break
}
}
func freeze(gesture: UITapGestureRecognizer) {
switch checkSomething {
case 1:
self.panGesture.isEnabled = false
self.backgroundColor = UIColor.blue
checkSomething += 1
print(checkSomething)
case 2:
self.panGesture.isEnabled = true
self.backgroundColor = UIColor.red
checkSomething -= 1
print(checkSomething)
default:
break
}
}
}
私は..あなたが見ることができるように私はそれを色をオンにするそこにスイッチがあり、タップが働くこのIBButton
@IBAction func makeACircle(_ sender: UIButton) {
let something = MakeACircle()
self.view.addSubview(something)
something.addGestureRecognizer(UIPanGestureRecognizer(target: something, action: #selector(something.dragCircle(gesture:))))
something.addGestureRecognizer(UITapGestureRecognizer(target: something, action: #selector(something.freeze(gesture:))))
something.center = self.view.center
}
と、プログラムでビューを作成しています、それは番号を印刷し、色を回します..それはちょうど1つのタップで起こり、パンはそのままです。
洞察力は大変ありがとうございます!これは私の最初の実行です、私はドアのところにいるのは分かっていますが、私はそれを理解できません。
「cancelsTouchesInView」を理解しているかどうかわかりません。このプロパティがtrue(デフォルト)で、受信者がジェスチャを認識した場合、そのジェスチャのタッチはビューに配信されず、以前に渡されたタッチはtouchesCancelled(_:with :)メッセージがビューに送信されました。ジェスチャ認識プログラムがそのジェスチャを認識しない場合、またはこのプロパティの値が偽である場合、マルチタッチシーケンスですべてのタッチを受け取ります。 – mat
説明を少し変更しました。タッチジェスチャーでパンジェスチャーを無効にして有効にしたいので、私はタッチをキャンセルしたくありません。ですから、ビューをダブルタップすると、その位置にロックされます。もう一度タップすると、もう一度移動できます。もう少し意味がありますか? インスタンスの特定のPanGestureRecognizerを参照してクラス内のコードを無効にする方法がわかりません。間違っていると思います。 { スイッチタップ{ ケース1!:もしタップ=真{ self.panGesture.isEnabled = falseを self.backgroundColor =:あなたの助け –
ただ、ラフアイデア... FUNC凍結(UITapGestureRecognizerジェスチャー)のための 感謝UIColor.blue }ケース2:場合は、タップ==真{ self.panGesture.isEnabled =真 self.backgroundColor = UIColor.red }デフォルト: ブレーク } } //これを試してみてください.... – Joe