KDvoid CCScrollLayer::claimTouch ( CCTouch* pTouch ) { CCTouchDispatcher* pDispatcher = CCDirector::sharedDirector ( )->getTouchDispatcher ( ); CCArray* pTargetedHandlers = pDispatcher->getTargetedHandlers ( ); // Enumerate through all targeted handlers. CCObject* pObject; CCARRAY_FOREACH ( pTargetedHandlers, pObject ) { CCTargetedTouchHandler* pHandler = (CCTargetedTouchHandler*) pObject; // Only our handler should claim the touch. if ( pHandler->getDelegate ( ) == this ) { if ( !pHandler->getClaimedTouches ( )->containsObject ( pTouch ) ) { pHandler->getClaimedTouches ( )->addObject ( pTouch ); } } else { // Steal touch from other targeted delegates, if they claimed it. if ( pHandler->getClaimedTouches ( )->containsObject ( pTouch ) ) { if ( pHandler->getDelegate ( ) ) { pHandler->getDelegate ( )->ccTouchEnded ( pTouch, KD_NULL ); } pHandler->getClaimedTouches ( )->removeObject ( pTouch ); } } }