프로그래밍 방식으로 뷰를 만들 수있는 기본 UI에 버튼이 있습니다. 그것은 아래쪽에 있습니다. PanGestureRecognizer를 사용하여 이동할 수있는 녹색 원으로 나옵니다.더블 탭 게이지 인식기와 신속한 흐름을 사용하여 pangesturderecognizer 끄기
내 목표는 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
}
과 프로그래밍 뷰를 생성하고이 번호를 인쇄하고 색상이 변합니다 ..하지만 한 번만 탭하면 팬이 계속 켜져 있습니다.
어떤 통찰력이라도 대단히 감사합니다! 이것은 나의 첫 실행이며, 나는 문앞에 있음을 알고 있지만, 나는 그것을 알아낼 수 없다.
나는 이해하지만, 'cancelsTouchesInView'를 보았습니다. 문서를 보면 '이 속성이 true (기본값)이고 수신자가 제스처를 인식하면 보류중인 해당 제스처의 터치는보기로 전달되지 않고 이전에 전달 된 터치는 touchesCancelled (_ :와 함께 취소됩니다. :) 메시지를 보냈습니다. 제스처 인식기가 제스처를 인식하지 못하거나이 속성의 값이 false이면 멀티 터치 시퀀스에서 모든 뷰를 볼 수 있습니다. " – mat
설명이 약간 변경되었으므로 도움이 될 것입니다. 나는 터치 제스처를 통해 팬 제스처를 비활성화하고 활성화 할 수 있기를 원하기 때문에 터치를 취소하고 싶지 않습니다. 따라서보기를 두 번 탭하면 잠겨 있습니다. 다시 두 번 탭하면 다시 움직일 수 있습니다. 좀 더 이해가 되니? 내 인스턴스의 특정 PanGestureRecognizer를 참조하여 내 수업의 코드를 사용하지 않도록 설정하는 방법을 알아낼 수 없습니다. 내가 잘못 생각한 부분입니다. { 스위치 탭 { 경우 1! : 만약 탭 = TRUE { self.panGesture.isEnabled = 거짓 self.backgroundColor = 당신의 도움이 –
그냥 멍 생각 ... FUNC 동결 (UITapGestureRecognizer 제스처)에 대한 감사 UIColor.blue } 경우 2 : 경우이 탭 == 사실 { self.panGesture.isEnabled = 사실 self.backgroundColor = UIColor.red } 기본 : 휴식 } } //이 일이 어떻게되는지보십시오 ... – Joe