2016-07-28 22 views
5

Mam UIControl (podklasa UIView), a kiedy go utworzę i wyrównam do lewej strony w moim kontrolerze widoku, "beginTrackingWithTouch" nie zadzwoni, kiedy dotknij widoku. Zostanie wywołany tylko wtedy, gdy uwolnię dotyk. Dziwne jest to, że metoda pointInside (point: CGPoint ...) jest wywoływana natychmiast po dotknięciu kontrolki UIControl, a jeszcze dziwniejsze jest to, że po wyrównaniu tego widoku UIControl po prawej stronie kontrolera widoku działa to dobrze. -beginTrackingWithTouch jest wywoływany natychmiast po dotknięciu widoku, a nie po zwolnieniu. Ponadto beginTrackingWithTouch jest wywoływany w tym samym czasie, co wywołanie metody endTrackingWithTouch. Przez niektóre testy działa dobrze, dopóki widok nie jest 20 px od lewej strony, to ten dziwny problem pojawia się ponownie.UIControl dotyka nie zachowuje się poprawnie po lewej stronie VC

Czy istnieje powód, dla którego UIControl continueTrackingWithTouch nie rejestruje się, jeśli jest umieszczony po lewej stronie kontrolera widoku? Czy ten sposób Apple zapobiega przewijaniu lewej ręki? Po lewej stronie nie ma absolutnie nic, co blokuje 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 
} 

// Zdjęcie poniżej: Widok UIControl znajduje się po lewej stronie (jasnoniebieski). Jeśli przesunę to po prawej stronie, metody rejestrują się poprawnie.

enter image description here

+1

Czy ten kontroler widoku ma kontroler nawigacji? Jeśli tak, kontroler nawigacyjny ma gest krawędzi (interactivePopGestureRecognizer), może to oznaczać, że kontrola jest wyłączona. – zylenv

Odpowiedz

2

kontroler nawigacyjny posiada wbudowany w tylnej rozpoznawania gestów, ustawić go na wartość false. Upewnij się, że jest ustawiony w viewDidAppear

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

TAK DZIĘKUJĘ! Miałem go w ViewDidLoad. –

Powiązane problemy