diff options
author | NicoleYarroch <nicole@livio.io> | 2018-02-27 13:08:55 -0500 |
---|---|---|
committer | NicoleYarroch <nicole@livio.io> | 2018-02-27 13:08:55 -0500 |
commit | 07e9ba5efa72ae5f0d51210cc41f1e3b6c738dcb (patch) | |
tree | 3d7f0849c110568df53ca1fa8ae03802aa70f677 | |
parent | da3050ef4f5b8d4cf44e02d2e24cb4f62201b717 (diff) | |
download | sdl_ios-bugfix/issue_875_gestures_main_thread.tar.gz |
Touch manager hit testing now done on main threadbugfix/issue_875_gestures_main_thread
Touch manager now checks if view was selected by gesture on the main thread
-rw-r--r-- | SmartDeviceLink/SDLTouchManager.m | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/SmartDeviceLink/SDLTouchManager.m b/SmartDeviceLink/SDLTouchManager.m index 40b3b1c54..b411619f1 100644 --- a/SmartDeviceLink/SDLTouchManager.m +++ b/SmartDeviceLink/SDLTouchManager.m @@ -215,8 +215,10 @@ static NSUInteger const MaximumNumberOfTouches = 2; self.currentPinchGesture = [[SDLPinchGesture alloc] initWithFirstTouch:self.previousTouch secondTouch:touch]; self.previousPinchDistance = self.currentPinchGesture.distance; if ([self.touchEventDelegate respondsToSelector:@selector(touchManager:pinchDidStartInView:atCenterPoint:)]) { - UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:self.currentPinchGesture.center] : nil; - [self.touchEventDelegate touchManager:self pinchDidStartInView:hitView atCenterPoint:self.currentPinchGesture.center]; + dispatch_async(dispatch_get_main_queue(), ^{ + UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:self.currentPinchGesture.center] : nil; + [self.touchEventDelegate touchManager:self pinchDidStartInView:hitView atCenterPoint:self.currentPinchGesture.center]; + }); } } break; } @@ -257,8 +259,10 @@ static NSUInteger const MaximumNumberOfTouches = 2; _performingTouchType = SDLPerformingTouchTypePanningTouch; if ([self.touchEventDelegate respondsToSelector:@selector(touchManager:panningDidStartInView:atPoint:)]) { - UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:touch.location] : nil; - [self.touchEventDelegate touchManager:self panningDidStartInView:hitView atPoint:touch.location]; + dispatch_async(dispatch_get_main_queue(), ^{ + UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:touch.location] : nil; + [self.touchEventDelegate touchManager:self panningDidStartInView:hitView atPoint:touch.location]; + }); } } break; case SDLPerformingTouchTypePanningTouch: { @@ -284,16 +288,20 @@ static NSUInteger const MaximumNumberOfTouches = 2; [self sdl_setMultiTouchFingerTouchForTouch:touch]; if (self.currentPinchGesture.isValid) { if ([self.touchEventDelegate respondsToSelector:@selector(touchManager:pinchDidEndInView:atCenterPoint:)]) { - UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:self.currentPinchGesture.center] : nil; - [self.touchEventDelegate touchManager:self pinchDidEndInView:hitView atCenterPoint:self.currentPinchGesture.center]; + dispatch_async(dispatch_get_main_queue(), ^{ + UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:self.currentPinchGesture.center] : nil; + [self.touchEventDelegate touchManager:self pinchDidEndInView:hitView atCenterPoint:self.currentPinchGesture.center]; + }); } self.currentPinchGesture = nil; } } break; case SDLPerformingTouchTypePanningTouch: { if ([self.touchEventDelegate respondsToSelector:@selector(touchManager:panningDidEndInView:atPoint:)]) { - UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:touch.location] : nil; - [self.touchEventDelegate touchManager:self panningDidEndInView:hitView atPoint:touch.location]; + dispatch_async(dispatch_get_main_queue(), ^{ + UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:touch.location] : nil; + [self.touchEventDelegate touchManager:self panningDidEndInView:hitView atPoint:touch.location]; + }); } } break; case SDLPerformingTouchTypeSingleTouch: { @@ -313,8 +321,10 @@ static NSUInteger const MaximumNumberOfTouches = 2; CGPoint centerPoint = CGPointCenterOfPoints(touch.location, self.singleTapTouch.location); if ([self.touchEventDelegate respondsToSelector:@selector(touchManager:didReceiveDoubleTapForView:atPoint:)]) { - UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:centerPoint] : nil; - [self.touchEventDelegate touchManager:self didReceiveDoubleTapForView:hitView atPoint:centerPoint]; + dispatch_async(dispatch_get_main_queue(), ^{ + UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:centerPoint] : nil; + [self.touchEventDelegate touchManager:self didReceiveDoubleTapForView:hitView atPoint:centerPoint]; + }); } } @@ -398,8 +408,10 @@ static NSUInteger const MaximumNumberOfTouches = 2; strongSelf.singleTapTouch = nil; [strongSelf sdl_cancelSingleTapTimer]; if ([strongSelf.touchEventDelegate respondsToSelector:@selector(touchManager:didReceiveSingleTapForView:atPoint:)]) { - UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:point] : nil; - [strongSelf.touchEventDelegate touchManager:strongSelf didReceiveSingleTapForView:hitView atPoint:point]; + dispatch_async(dispatch_get_main_queue(), ^{ + UIView *hitView = (self.hitTester != nil) ? [self.hitTester viewForPoint:point] : nil; + [strongSelf.touchEventDelegate touchManager:strongSelf didReceiveSingleTapForView:hitView atPoint:point]; + }); } }); } |