diff --git a/Extensions/CCScrollLayer/CCScrollLayer.m b/Extensions/CCScrollLayer/CCScrollLayer.m index 0d164a5..4e37e86 100755 --- a/Extensions/CCScrollLayer/CCScrollLayer.m +++ b/Extensions/CCScrollLayer/CCScrollLayer.m @@ -356,6 +356,7 @@ - (void) claimTouch: (UITouch *) aTouch #else CCTouchDispatcher *dispatcher = [CCTouchDispatcher sharedDispatcher]; #endif + // First claim the touch and then cancel it on other handlers // Enumerate through all targeted handlers. for ( CCTargetedTouchHandler *handler in [dispatcher targetedHandlers] ) @@ -368,18 +369,24 @@ - (void) claimTouch: (UITouch *) aTouch [handler.claimedTouches addObject: aTouch]; } } - else - { - // Steal touch from other targeted delegates, if they claimed it. - if ([handler.claimedTouches containsObject: aTouch]) - { - if ([handler.delegate respondsToSelector:@selector(ccTouchCancelled:withEvent:)]) - { - [handler.delegate ccTouchCancelled: aTouch withEvent: nil]; - } - [handler.claimedTouches removeObject: aTouch]; - } - } + } + + // Enumerate through all targeted handlers. + for ( CCTargetedTouchHandler *handler in [dispatcher targetedHandlers] ) + { + // The rest of the handlers. + if (handler.delegate != self) + { + // Steal touch from other targeted delegates, if they claimed it. + if ([handler.claimedTouches containsObject: aTouch]) + { + if ([handler.delegate respondsToSelector:@selector(ccTouchCancelled:withEvent:)]) + { + [handler.delegate ccTouchCancelled: aTouch withEvent: nil]; + } + [handler.claimedTouches removeObject: aTouch]; + } + } } }