//
// DJInfiniteScrollPicker.cpp
// maptest
//
// Created by 杜甲 on 14-5-27.
//
//
#include "DJInfiniteScrollPicker.h"
bool DJInfiniteScrollPicker::init()
{
bool bRet = false;
do {
CC_BREAK_IF(!ui::Layout::init());
bRet = true;
} while (0);
return bRet;
}
DJInfiniteScrollPicker* DJInfiniteScrollPicker::create(Size size)
{
DJInfiniteScrollPicker* pRet = new DJInfiniteScrollPicker();
if (pRet && pRet->initWithSize(size))
{
pRet->autorelease();
}
else
{
CC_SAFE_DELETE(pRet);
}
return pRet;
}
bool DJInfiniteScrollPicker::initWithSize(cocos2d::Size size)
{
bool bRet = false;
do {
CC_BREAK_IF(!ui::Layout::init());
bRet = true;
} while (0);
return bRet;
}
void DJInfiniteScrollPicker::initInfiniteScrollView()
{
isFirstDrag = false;
fontName = "TrebuchetMS-Bold";
alphaOfobjs = 1.0f;
heightOffset = 0.0f;
positionRatio = 1.0f;
beforePointX = 0.0f;
infiniteScrollView = extension::ScrollView::create(getSize());
infiniteScrollView->retain();
infiniteScrollView->setPosition(Point(0, 0));
infiniteScrollView->setBounceable(false);
infiniteScrollView->setDelegate(this);
//infiniteScrollView->setContentSize(get);
addChild(infiniteScrollView);
Sprite* temp = Sprite::create("res/set2/s2_1.png");
// log("anchor = %f",temp->getAnchorPoint().x);
// temp->setPosition(Point(temp->getContentSize().width / 2, temp->getContentSize().height / 2));
// // temp->setPosition(Point( itemSize.width, 0));
// infiniteScrollView->addChild(temp);
if (imageAry.size() > 0) {
itemSize = temp->getContentSize();
}
//
if (imageAry.size() > 0) {
for (int i = 0; i < (imageAry.size() * 5); i++) {
//ui::Text* temp = ui::Text::create(StringUtils::format("%d",i % (int)imageAry.size()), fontName, 23);
Sprite* sprite = Sprite::create(imageAry.at(i % imageAry.size()));
sprite->setTag(i % imageAry.size());
sprite->setPosition(Point(i * itemSize.width + itemSize.width / 2, itemSize.height / 2));
imageStore.push_back(sprite);
infiniteScrollView->addChild(sprite);
}
}
infiniteScrollView->setContentSize(Size(imageAry.size() * 5 * itemSize.width, getSize().height));
float viewMiddle = imageAry.size() * 2 * itemSize.width;
infiniteScrollView->setContentOffset(Point(-viewMiddle , 0));
}
void DJInfiniteScrollPicker::scrollViewDidScroll(extension::ScrollView *view)
{
float sectionSize = imageAry.size() * itemSize.width;
log("QQQQQQQQQQQQ%f,%f",infiniteScrollView->getContentOffset().x,beforePointX);
if (beforePointX != infiniteScrollView->getContentOffset().x)
{
if (infiniteScrollView->getContentOffset().x < 0)
{
if (infiniteScrollView->getContentOffset().x >= (-sectionSize + sectionSize / 2))
{
view->setContentOffset(Point(-sectionSize * 2 +sectionSize / 2, 0));
}
else if (view->getContentOffset().x <= (-sectionSize * 3 - sectionSize / 2))
{
view->setContentOffset(Point(-sectionSize * 2 - sectionSize / 2, 0));
}
// if (infiniteScrollView->isDragging()) {
// log("拖拽中");
reloadView(view->getContentOffset().x - getSize().width / 2);
// }
}
else
{
view->setContentOffset(Point(-sectionSize * 2 + sectionSize / 2, 0));
}
//判断是否被拖拽
if (!infiniteScrollView->isDragging()) {
//判断是否是首次进入,首次不拖拽
if (isFirstDrag) {
beforePointX = -currSprite->getPosition().x + getSize().width / 2;
view->setContentOffset(Point(beforePointX, 0));
//log("停止拖拽view->getContentOffset().xQQ = %f",view->getContentOffset().x);
if (_infiniteEventListener && _infiniteEventSelector) {
(_infiniteEventListener->*_infiniteEventSelector)(currSprite);
}
// if (_scrollViewEventListener && _scrollViewEventSelector)
// {
// (_scrollViewEventListener->*_scrollViewEventSelector)(this, SCROLLVIEW_EVENT_SCROLL_TO_TOP);
// }
}
isFirstDrag = true;
}
}
log("view->getContentOffset().x = %f",view->getContentOffset().x);
beforePointX = view->getContentOffset().x;
}
void DJInfiniteScrollPicker::reloadView(float offset)
{
float biggestSize = 0.0f;
Ref* biggestView;
Sprite* sprite = imageStore.at(2);
for (int i = 0; i < imageStore.size(); i++)
{
Sprite* sprite = imageStore.at(i);
if (-sprite->getPosition().x > (offset - itemSize.width / 2) && -sprite->getPosition().x < (offset + itemSize.width / 2)) {
currSprite = sprite;
currNum = i;
sprite->setScale(2);
}else
{
sprite->setScale(1);
}
}
}
void DJInfiniteScrollPicker::snapToAnEmotion()
{
float offset = infiniteScrollView->getContentOffset().x - getSize().width / 2;
}
void DJInfiniteScrollPicker::scrollViewDidZoom(extension::ScrollView *view)
{
}
void DJInfiniteScrollPicker::addEventDJInifiteScrollPicker(cocos2d::Ref *sender, SEL_InfiniteScrollViewEvent type)
{
_infiniteEventListener = sender;
_infiniteEventSelector = type;
}