本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
滚动视图,包含了许多操作,例如滚动方向 ,顶部边界,滚动视图的容量等
/////cocos2d-x-3.0alpha0/extensions/CocoStudio/GUI/UIWidgets/ScrollWidget // 滚动视图,包含了许多操作,例如滚动方向 ,顶部边界,滚动视图的容量等 #ifndef __UISCROLLVIEW_H__ #define __UISCROLLVIEW_H__ #include "../../Layouts/Layout.h" #include "UIScrollInterface.h" NS_CC_EXT_BEGIN enum SCROLLVIEW_DIR { SCROLLVIEW_DIR_NONE, SCROLLVIEW_DIR_VERTICAL, SCROLLVIEW_DIR_HORIZONTAL }; enum SCROLLVIEW_MOVE_DIR { SCROLLVIEW_MOVE_DIR_NONE, SCROLLVIEW_MOVE_DIR_UP, SCROLLVIEW_MOVE_DIR_DOWN, SCROLLVIEW_MOVE_DIR_LEFT, SCROLLVIEW_MOVE_DIR_RIGHT, }; typedef enum { SCROLLVIEW_EVENT_SCROLL_TO_TOP, SCROLLVIEW_EVENT_SCROLL_TO_BOTTOM, SCROLLVIEW_EVENT_SCROLL_TO_LEFT, SCROLLVIEW_EVENT_SCROLL_TO_RIGHT, }ScrollviewEventType; typedef void (Object::*SEL_ScrollViewEvent)(Object*, ScrollviewEventType); #define scrollvieweventselector(_SELECTOR) (SEL_ScrollViewEvent)(&_SELECTOR) class UIScrollView : public Layout , public UIScrollInterface { public: /** * Default constructor */ UIScrollView(); /** * Default destructor */ virtual ~UIScrollView(); /** * Allocates and initializes. */ static UIScrollView* create(); /** * Changes scroll direction of scrollview. //改变 scrollview 的滚动方向 * * @see SCROLLVIEW_DIR SCROLLVIEW_DIR_VERTICAL means vertical scroll, SCROLLVIEW_DIR_HORIZONTAL means horizontal scroll * * @param SCROLLVIEW_DIR */ void setDirection(SCROLLVIEW_DIR dir); SCROLLVIEW_DIR getDirection(); /** * Gets inner container of scrollview. //获取 scrollview 的内部容器 * * Inner container is the container of scrollview's children. * * @return inner container. */ Layout* getInnerContainer(); /** * Scroll inner container to bottom boundary of scrollview. /// scrollview 内部容器的底部边界 */ void scrollToBottom(); /** * Scroll inner container to top boundary of scrollview. /// scrollview 内部容器的顶部边界 */ void scrollToTop(); /** * Changes inner container size of scrollview. * * 内部容器容量必须大于或等于 scrollview‘s 的容量 * * @param inner container size. */ void setInnerContainerSize(const Size &size); /** * Gets inner container size of scrollview. 获取 scrollview 的内部内部容器容量 * 内部容器容量必须大于或等于 scrollview‘s 的容量 * * * @return inner container size. */ const Size& getInnerContainerSize() const; /** * Add call back function called scrollview event triggered 添加一个回调函数 触发滚动事件 */ void addEventListener(Object* target, SEL_ScrollViewEvent selector); //override "setLayoutExecutant" method of widget. 覆盖 widget 的 setLayoutExecutant 方法 virtual void setLayoutExecutant(LayoutExecutant* exe); //override "getLayoutExecutant" method of widget. virtual LayoutExecutant* getLayoutExecutant() const; //override "addChild" method of widget. virtual bool addChild(UIWidget* widget); //override "removeAllChildrenAndCleanUp" method of widget. virtual void removeAllChildren(); //override "removeChild" method of widget. virtual bool removeChild(UIWidget* child); //override "getChildren" method of widget. virtual Array* getChildren(); //override "onTouchBegan" method of widget. virtual bool onTouchBegan(const Point &touchPoint); //override "onTouchMoved" method of widget. virtual void onTouchMoved(const Point &touchPoint); //override "onTouchEnded" method of widget. virtual void onTouchEnded(const Point &touchPoint); //override "onTouchCancelled" method of widget. virtual void onTouchCancelled(const Point &touchPoint); //override "onTouchLongClicked" method of widget. virtual void onTouchLongClicked(const Point &touchPoint); virtual void update(float dt); /** * Returns the "class name" of widget. //返回 widget 的名字 */ virtual const char* getDescription() const; protected: virtual bool init(); virtual void initRenderer(); void moveChildren(float offset); void autoScrollChildren(float dt); void startAutoScrollChildren(float v); void stopAutoScrollChildren(); float getCurAutoScrollDistance(float time); virtual bool scrollChildren(float touchOffset); void startRecordSlidAction(); virtual void endRecordSlidAction(); virtual void handlePressLogic(const Point &touchPoint); virtual void handleMoveLogic(const Point &touchPoint); virtual void handleReleaseLogic(const Point &touchPoint); virtual void interceptTouchEvent(int handleState,UIWidget* sender,const Point &touchPoint); virtual void checkChildInfo(int handleState,UIWidget* sender,const Point &touchPoint); void recordSlidTime(float dt); //override "releaseResoures" method of widget. //重写 widget 的releaseResoures 方法 virtual void releaseResoures(); void scrollToTopEvent(); void scrollToBottomEvent(); void scrollToLeftEvent(); void scrollToRightEvent(); void setMoveDirection(SCROLLVIEW_MOVE_DIR dir); SCROLLVIEW_MOVE_DIR getMoveDirection(); virtual void onSizeChanged(); virtual void setClippingEnabled(bool able){Layout::setClippingEnabled(able);}; protected: Layout* _innerContainer; SCROLLVIEW_DIR _direction; SCROLLVIEW_MOVE_DIR _moveDirection; float _touchStartLocation; float _touchEndLocation; float _touchMoveStartLocation; float _topBoundary;//test float _bottomBoundary;//test float _leftBoundary; float _rightBoundary; bool _topEnd; bool _bottomEnd; bool _leftEnd; bool _rightEnd; bool _autoScroll; float _autoScrollOriginalSpeed; float _autoScrollAcceleration; bool _bePressed; float _slidTime; Point _moveChildPoint; float _childFocusCancelOffset; Object* _eventListener; SEL_ScrollViewEvent _eventSelector; }; NS_CC_EXT_END #endif /* defined(__CocoGUI__UIScrollView__) */