0

工作我做了一個自定義的UIControl它使用UIControlEvents來識別特定的相互作用。它的工作都很好。現在,我也希望我的UIControl來識別UIPanGestureRecognizer,這裏的代碼UIPanGestureRecognizer不UIControlEvents

fieldView.addTarget(self, action: #selector(willSelectField(sender:)), for: .touchDown) 
fieldView.addTarget(self, action: #selector(didSelectField(sender:)), for: .touchUpInside) 
fieldView.addTarget(self, action: #selector(canceledFieldSelection(sender:)), for: .touchUpOutside) 
fieldView.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(draggingField(gesture:)))) 

所以,當我點擊我的的FieldView(定製UIControl)touchDown將被識別。如果我不開始平移,touchUpInsidetouchUpOutside也將得到認可。但是,如果我和平移例如放開我的FieldView外,touchUpOutside不會被觸發。


注:touchDragInside不是一個選擇,因爲它只能識別一個範圍內的大約100像素內拖動。

回答

0

reference

如果一個手勢識別器識別出它的姿態,視圖的剩餘觸摸被取消。

你可以嘗試設置cancelsTouchesInViewfalse,或覆蓋在你的意見touchesCancelled(_:with:)

+0

我嘗試過,但在'touchesCancelled'方法不會被調用,我也不能找到一種方法touchUpInside'或'touchUpOutside'之間'這個方法來區分 – Codey