2016-07-28 29 views
5

UIControl(UIViewのサブクラス)を作成し、ビューコントローラの左側に整列すると、「beginTrackingWithTouch」が呼び出されません。ビューに触れてください。タッチを離すと呼び出されます。私がUIControlに触れると、pointInside(point:CGPoint ...)メソッドが直ちに呼び出され、さらに奇妙なのは、このUIControlビューをView Controllerの右側に配置すると、 -beginTrackingWithTouchは、ビューがタッチされると直ちに呼び出され、解放されたときは呼び出されません。さらに、beginTrackingWithTouchが呼び出されるのと同じ時間beginTrackingWithTouchが呼び出されます。いくつかのテストでは、ビューが左側から20ピクセルになるまで正常に動作しますが、この奇妙な問題が再度発生します。UIControlはVCの左側で正しく動作しません

UIControl continueTrackingWithTouchがビューコントローラの左端に配置されていると登録に失敗する理由はありますか?アップルが左手のスクロールを防止する方法ですか? UIControlをブロックしている左側には何もありません。

//In public class CustomScrollBar : UIControl 

//This method gets called everytime when UIControl (red area in picture) is touched 
override public func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool { 
    return CGRectContainsPoint(handleHitArea, point) 
} 

//Only gets called when UIControl is touched and let go. It will not get called until your finger lifts off the screen. 
override public func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool { 

    self.scrollerLine.hidden = true 

    if let delegate = self.delegate { 
     delegate.beginTrackingWithTouch() 
    } 

    guard self.isHandleVisible else{ 
     return false 
    } 

    self.lastTouchLocation = touch.locationInView(self) 
    self.isHandleDragged = true 

    self.setNeedsLayout() 

    return true 
} 

//以下の画像:UIControlビューは左側(薄い青色)です。これを右端に移動すると、メソッドは正常に登録されます。

enter image description here

+1

このビューコントローラにはナビコントローラがありますか?もしそうであれば、naviコントローラはエッジジェスチャ(interactivePopGestureRecognizer)を持っています。 – zylenv

答えて

2

ナビゲーションコントローラは、バックジェスチャー認識に内蔵され、falseに設定しています。 viewDidAppearで設定されていることを確認してください

self.navigationController!.interactivePopGestureRecognizer!.enabled = false 
+0

ありがとうございました!私はViewDidLoadでそれを持っていた。 –

関連する問題