bool CAAutoCollectionView::ccTouchBegan(CATouch *pTouch, CAEvent *pEvent) { if (!m_vTouches.empty()) { m_vTouches.replace(0, pTouch); return true; } bool isInertia = m_tInertia.getLength() < 1.0f; if (!CAScrollView::ccTouchBegan(pTouch, pEvent)) return false; if (m_bAllowsSelection && this->isScrollWindowNotOutSide() == false && isInertia) { DPoint point = m_pContainer->convertTouchToNodeSpace(pTouch); std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_mpUsedCollectionCells.begin(); itr != m_mpUsedCollectionCells.end(); ++itr) { CACollectionViewCell* pCell = itr->second; CC_CONTINUE_IF(pCell == NULL); if (pCell->getFrame().containsPoint(point) && pCell->isVisible()) { CC_BREAK_IF(pCell->getControlState() == CAControlStateDisabled); if (m_pHighlightedCollectionCells != pCell) { if (m_pHighlightedCollectionCells) { m_pHighlightedCollectionCells->setControlStateNormal(); } m_pHighlightedCollectionCells = pCell; } CC_BREAK_IF(pCell->getControlState() == CAControlStateSelected); CAViewAnimation::beginAnimations(m_s__StrID, NULL); CAViewAnimation::setAnimationDuration(0.05f); CAViewAnimation::setAnimationDidStopSelector(pCell, CAViewAnimation0_selector(CACollectionViewCell::setControlStateHighlighted)); CAViewAnimation::commitAnimations(); break; } } } return true; }
bool CACollectionView::ccTouchBegan(CATouch *pTouch, CAEvent *pEvent) { if (m_pTouches->count() > 0) { m_pTouches->replaceObjectAtIndex(0, pTouch); return true; } bool isInertia = m_tInertia.getLength() < 1.0f; if (!CAScrollView::ccTouchBegan(pTouch, pEvent)) return false; if (m_bAllowsSelection && this->isScrollWindowNotOutSide() == false && isInertia) { CCPoint point = m_pContainer->convertTouchToNodeSpace(pTouch); std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_pUsedCollectionCells.begin(); itr != m_pUsedCollectionCells.end(); ++itr) { CACollectionViewCell* pCell = itr->second; CC_CONTINUE_IF(pCell == NULL); if (pCell->getFrame().containsPoint(point) && pCell->isVisible()) { CC_BREAK_IF(pCell->getControlState() == CAControlStateDisabled); if (m_pHighlightedCollectionCells) { m_pHighlightedCollectionCells->setControlStateNormal(); } m_pHighlightedCollectionCells = pCell; CC_BREAK_IF(pCell->getControlState() == CAControlStateSelected); CCDelayTime* delayTime = CCDelayTime::create(0.05f); CCCallFunc* func = CCCallFunc::create(pCell, callfunc_selector(CACollectionViewCell::setControlStateHighlighted)); CCSequence* actions = CCSequence::create(delayTime, func, NULL); m_pContainer->runAction(actions); break; } } } return true; }
void CACollectionView::mouseMoved(CATouch* pTouch, CAEvent* pEvent) { if (m_bAllowsSelection) { DPoint point = m_pContainer->convertTouchToNodeSpace(pTouch); std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_mpUsedCollectionCells.begin(); itr != m_mpUsedCollectionCells.end(); ++itr) { CACollectionViewCell* cell = itr->second; CC_CONTINUE_IF(cell == NULL); if (cell->getFrame().containsPoint(point) && cell->isVisible()) { CC_BREAK_IF(cell->getControlState() == CAControlStateDisabled); if (m_pHighlightedCollectionCells) { CAIndexPath3E index = CAIndexPath3E(m_pHighlightedCollectionCells->getSection(), m_pHighlightedCollectionCells->getRow(), m_pHighlightedCollectionCells->getItem()); if (m_pSelectedCollectionCells.count(index)) { m_pHighlightedCollectionCells->setControlStateHighlighted(); } else { m_pHighlightedCollectionCells->setControlStateNormal(); } } m_pHighlightedCollectionCells = cell; cell->setControlStateHighlighted(); break; } } } }
void CACollectionView::recoveryCollectionCell() { CCRect rect = this->getBounds(); rect.origin = getContentOffset(); rect.origin.y -= rect.size.height * 0.1f; rect.size.height *= 1.2f; std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_pUsedCollectionCells.begin(); itr != m_pUsedCollectionCells.end(); itr++) { CACollectionViewCell* cell = itr->second; CC_CONTINUE_IF(cell == NULL); CCRect cellRect = cell->getFrame(); CC_CONTINUE_IF(rect.intersectsRect(cellRect)); m_pFreedCollectionCells[cell->getReuseIdentifier()].pushBack(cell); cell->removeFromSuperview(); cell->resetCollectionViewCell(); itr->second = NULL; } }