void TFMenuScrollViewScene1::addTouchEvent() { Size winSize = Director::getInstance()->getWinSize(); auto listener1 = EventListenerTouchOneByOne::create();//创建一个触摸监听 listener1->setSwallowTouches(false);//设置是否想下传递触摸 //3.0 后可以直接在touchBegan后添加它的实现代码,而不用特意去写一个touchBegan的函数 listener1->onTouchBegan = [](Touch* touch, Event* event) { return true; }; listener1->onTouchMoved = [](Touch* touch, Event* event) { }; listener1->onTouchEnded = [=](Touch* touch, Event* event) { scrollView->unscheduleAllSelectors(); float layerX = scrollView->getContentOffset().x; int offset = (int)layerX % (int)winSize.width; Point adjustPos; float adjustAnimeDelay; float oldlayerX = -(page*winSize.width); if (layerX == oldlayerX) { adjustPos = scrollView->getContentOffset() - Point(offset, 0); adjustAnimeDelay = (float)abs(offset) / (winSize.width / 2); } if (layerX>oldlayerX) { page--; if (page<0) { page = 0; } adjustPos = scrollView->getContentOffset() - Point(offset, 0); adjustAnimeDelay = (float)abs(offset) / (winSize.width / 2); } else { if (page >= 2) { page = 1; } if (offset<-winSize.width / 2) { page++; adjustPos = scrollView->getContentOffset() - Point(winSize.width + offset, 0); adjustAnimeDelay = (float)abs(winSize.width + offset) / (winSize.width / 2); } else { adjustPos = scrollView->getContentOffset() - Point(offset, 0); adjustAnimeDelay = (float)abs(offset) / (winSize.width / 2); } } scrollView->setContentOffsetInDuration(adjustPos, adjustAnimeDelay); MenuItemImage* image = (MenuItemImage*)buildArr.at(page); image->selected(); CCLOG("--------%i--------", page); }; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, scrollView); }