CAScrollView(滾動視圖)

2018-08-29 17:07 更新

類說明

CAScrollView即滾動視圖,負責CrossApp的所有滾動操作。可支持裁剪其矩形區(qū)域以外的渲染,并讓其子數(shù)圖支持滑動操作與縮放功能。我們在使用CAScrollView時,有時需要對CAScrollView的一個事件進行監(jiān)聽,那么我要就要去實現(xiàn)CAScrollViewDelegate,并重寫其函數(shù)。


CAScrollView 屬性 (點擊屬性名可查看屬性介紹)

屬性說明
TouchEnabledAtSubviews觸摸事件啟用在子視圖
ViewSize設(shè)置容器的內(nèi)部大小
Bounces設(shè)置是否滾動回彈
BounceHorizontal水平方向回彈
BounceVertical豎直方向回彈
ShowsHorizontalScrollIndicator設(shè)置是否顯示水平滾動條
ShowsVerticalScrollIndicator設(shè)置是否顯示豎直滾動條
MaximumZoomScale最大縮放比例,默認值為1
MinimumZoomScale最小縮放比例,默認值為1
ZoomScale滑動層縮放比例, 默認值為1
ScrollViewDelegate滾動視圖代表
ShowsScrollIndicators顯示滾動指示器
HeaderRefreshView頭部刷新試圖
FooterRefreshView尾部刷新試圖
Tracking是否正在滾動
Decelerating是否在慣性運動中
MultitouchGesture多點觸控手勢
Zooming是否正在進行縮放控制


CAScrollView 方法 (點擊方法名可查看方法介紹)

方法說明
setContentOffset設(shè)置相對于視圖頂部的偏移量
setBackGroundImage設(shè)置背景圖片
setBackGroundColor設(shè)置背景顏色
addSubview添加子視圖
insertSubview插入子視圖
removeAllSubviews刪除所有子視圖
removeSubview刪除子視圖
removeSubviewByTag通過標簽刪除視圖
getSubviewByTag通過標簽獲取視圖
setContentOffset獲得內(nèi)容偏移
setZoomScale設(shè)置縮放比例
isReachBoundaryLeft是否到達左邊界
isReachBoundaryRight是否到達右邊界
isReachBoundaryUp是否到達上邊界
isReachBoundaryDown是否到達下邊界
endHeaderRefresh端頭刷新
endFooterRefresh端尾刷新
getContentOffset獲取相對于視圖頂部的偏移量
ccTouchBegan觸摸事件開始時的回調(diào)函數(shù)
ccTouchMoved觸摸事件中觸點移動時的回調(diào)函數(shù)
ccTouchEnded觸摸事件結(jié)束時的回調(diào)函數(shù)
ccTouchCancelled觸摸非正常結(jié)束時的回調(diào)函數(shù)。(例如:電話或鎖屏)
mouseScrollWheel鼠標滾輪
createWithFrame創(chuàng)建,并指定其Frame,默認Frame為(0,0,0,0)
createWithCenter創(chuàng)建,并設(shè)置其Center,默認Center為(0,0,0,0)
init初始化
startPullToHeaderRefreshView開始頂端刷新視圖
switchPCMode開關(guān)PC模式


CAScrollView即滾動視圖,負責CrossApp的所有滾動操作。可支持裁剪其矩形區(qū)域以外的渲染,并讓其子數(shù)圖支持滑動操作與縮放功能。我們在使用CAScrollView時,有時需要對CAScrollView的一個事件進行監(jiān)聽,那么我要就要去實現(xiàn)CAScrollViewDelegate,并重寫其函數(shù)。


CAScrollView相對于前面的控件來說,使用比較復(fù)雜。但我們清楚了每個函數(shù)的意義之后,便可以很清晰的構(gòu)建出我們所需要的CAScrollView。這里我們就舉一個展示文本的一個CAScrollView。

首先,我們希望能夠監(jiān)聽到CAScrollView的變化,那么我則需要去實現(xiàn)CAScrollViewDelegate,我們修該FirstViewController.h,添加要實現(xiàn)的函數(shù)如下:

#include <iostream>
#include "CrossApp.h"
 
USING_NS_CC;
 
class FirstViewController: public CAViewController ,public CAScrollViewDelegate
{ 
public:
 
    FirstViewController();
    virtual ~FirstViewController();
     
    //觸摸滾動時調(diào)用
    virtual void scrollViewDidMoved(CAScrollView* view);
    
    //觸摸滾動停止時調(diào)用
    virtual void scrollViewStopMoved(CAScrollView* view);
     
    //滾動時調(diào)用(包括慣性滾動時)
    virtual void scrollViewDidScroll(CAScrollView* view);
    
    //開始滾動時調(diào)用
    virtual void scrollViewWillBeginDragging(CAScrollView* view);
    
    //結(jié)束滾動時調(diào)用
    virtual void scrollViewDidEndDragging(CAScrollView* view);
     
    //縮放時調(diào)用
    virtual void scrollViewDidZoom(CAScrollView* view);
    
    //頭部開始刷新時調(diào)用
    virtual void scrollViewHeaderBeginRefreshing(CAScrollView* view);
    
    //尾巴開始刷新時調(diào)用
    virtual void scrollViewFooterBeginRefreshing(CAScrollView* view);
     
protected:
     
    void viewDidLoad();
     
    void viewDidUnload();
     
}

然后我們就要在FirstViewController.cpp中去實現(xiàn)這寫代理函數(shù):
void FirstViewController::viewDidLoad()
{
    // 獲得屏幕大小
    DSize size  = this->getView()->getBounds().size;
    
    //設(shè)置背景顏色為黑色
    this->getView()->setColor(CAColor_black);
    
    //創(chuàng)建scrollView
    CAScrollView* scrollView = CAScrollView::createWithCenter(DRect(size.width*0.5,size.height*0.5 - 270,size.width * 0.5, 100));
   
    //CACScrollView容器的大小
    scrollView->setViewSize(DSize(size.width, 200));
    
    //設(shè)置背景顏色
    scrollView->setBackGroundColor(CAColor_orange);
    
    //設(shè)置背景圖片
    //scrollView->setBackGroundImage(CAImage::create("r/HelloWorld.png"));
    
    //水平方向是否回彈
    scrollView->setBounceHorizontal(false);
    
    //豎直方向是否回彈
    scrollView->setBounceVertical(true);
    
    //是否滾動回彈,控制豎直和水平方向,默認為ture
    //scrollView->setBounces(false);
    scrollView->setScrollViewDelegate(this);
     
    this->getView()->addSubview(scrollView);
     
    //創(chuàng)建label
    CALabel* label = CALabel::createWithFrame(DRect(0, 0, size.width * 0.5, 200));
    
    //設(shè)置水平劇中
    label->setTextAlignment(CATextAlignmentCenter);
    
    //設(shè)置豎直劇中
    label->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter);
    
    //設(shè)置字體大小
    label->setFontSize(18 * CROSSAPP_ADPTATION_RATIO);
    
    //設(shè)置文本內(nèi)容
    label->setText(UTF8("CrossApp具有強大的跨平臺性能,并且具有離線能力,可以進行離線操作。對開發(fā)者和用戶入門要求較低,且功能強大。綜合效率高,開發(fā)者可以根據(jù)實際情況,考慮各方面因素來選擇合適的開發(fā)解決方案。"));
    
    //設(shè)置文本顏色
    label->setColor(CAColor_blue);
    
    //將label添加到scrollView
    scrollView->addSubview(label);
}
 
//觸摸滾動時調(diào)用
void FirstViewController::scrollViewDidMoved(CAScrollView* view)
{
    CCLog("DidMoved-->");
}
 
//觸摸滾動停止時調(diào)用
void FirstViewController::scrollViewStopMoved(CAScrollView* view)
{
    CCLog("StopMoved-->");
}
 
//滾動時調(diào)用(包括慣性滾動時)
void FirstViewController::scrollViewDidScroll(CAScrollView* view)
{
    CCLog("DidMScroll-->");
}
 
//開始滾動時調(diào)用
void FirstViewController::scrollViewWillBeginDragging(CAScrollView* view)
{
    CCLog("BeginDragging-->");
}
 
//結(jié)束滾動時調(diào)用
void FirstViewController::scrollViewDidEndDragging(CAScrollView* view)
{
    CCLog("DidEndDragging-->");
}
 
//縮放時調(diào)用
void FirstViewController::scrollViewDidZoom(CAScrollView* view)
{
    CCLog("DidZoom-->");
}
 
//頭部開始刷新時調(diào)用
void FirstViewController::scrollViewHeaderBeginRefreshing(CAScrollView* view)
{
    CCLog("HeaderBeginRefreshing-->");
}
 
//尾巴開始刷新時調(diào)用
void FirstViewController::scrollViewFooterBeginRefreshing(CAScrollView* view)
{
    CCLog("FooterBeginRefeshing-->");
}



CAScrollView 屬性介紹        

TouchEnabledAtSubviews

類型:bool

解釋:觸摸事件啟用在子視圖。is/set{}。


ViewSize

類型:DSize

解釋:設(shè)置容器的內(nèi)部大小。set/get{}。


Bounces

類型:bool

解釋:設(shè)置是否滾動回彈。is/set{}。


BounceHorizontal

類型:bool

解釋:水平方向回彈。is/set{}。


BounceVertical

類型:bool

解釋:豎直方向回彈。is/set{}。


ShowsHorizontalScrollIndicator

類型:bool

解釋:設(shè)置是否顯示水平滾動條。is/set{}。


ShowsVerticalScrollIndicator

類型:bool

解釋:設(shè)置是否顯示豎直滾動條。is/set{}。


MaximumZoomScale

類型:float

解釋:最大縮放比例,默認值為1。set/get{}。


MinimumZoomScale

類型:float

解釋:最小縮放比例,默認值為1。set/get{}。


ZoomScale

類型:float

解釋: 滑動層縮放比例, 默認值為1。get{}。


ScrollViewDelegate

類型:CAScrollViewDelegate*

解釋:滾動視圖代表。set/get{}。


ShowsScrollIndicators

類型:bool

解釋:顯示滾動指示器。is/set{}。


HeaderRefreshView

類型:CAPullToRefreshView*

解釋:頭部刷新試圖。set/get{}。


FooterRefreshView

類型:CAPullToRefreshView*

解釋:尾部刷新試圖。set/get{}。


Tracking

類型:bool

解釋:查看 ScrollView 是否正在滾動。is{}。

        

Zooming

類型:bool

解釋:查看 ScrollView 是否正在進行縮放控制。is{}。


Decelerating

類型:bool

解釋:查看 ScrollView 是否在慣性運動中。is{}。


MultitouchGesture

類型:MultitouchGesture

解釋:多點觸控手勢,set/get{}。


CAScrollView 方法介紹

void setContentOffset(const DPoint& offset, bool animated);

返回值:void

參數(shù):

類型參數(shù)名說明
const DPoint&offset偏移量
boolanimated是否播放動畫

解釋:設(shè)置內(nèi)容偏移量


void setBackGroundImage(CAImage* image);

返回值:void

參數(shù):

類型參數(shù)名說明
CAImage*image背景圖像

解釋:設(shè)置背景圖像


void setBackGroundColor(const CAColor4B &color);

返回值:void

參數(shù):

類型參數(shù)名說明
const CAColor4B&color背景顏色

解釋:設(shè)置背景顏色


virtual void addSubview(CAView* subview); 

返回值:void

參數(shù):

類型參數(shù)名說明
CAView*subview子視圖

解釋:添加子視圖


virtual void insertSubview(CAView* subview, int z);

返回值:void

參數(shù):

類型參數(shù)名說明
CAView*subview子視圖
intz數(shù)量

解釋:插入子視圖


void removeAllSubviews();

返回值:void

參數(shù):

解釋:刪除所有子視圖


void removeSubview(CAView* subview);  

返回值:void

參數(shù):

類型參數(shù)名說明
CAView*subview子視圖

解釋:刪除子視圖


CAView* getSubviewByTag(int aTag); 

返回值:CAView*

參數(shù):

類型參數(shù)名說明
intaTag子視圖標簽

解釋:通過標簽獲取子視圖


void removeSubviewByTag(int tag);

返回值:void

參數(shù):

類型參數(shù)名說明
inttag子視圖標簽

解釋:通過標簽刪除子視圖


CAView* getSubviewByTag(int aTag);

返回值:CAView* 

參數(shù):

類型參數(shù)名說明
intaTag子視圖標簽

解釋:過標簽獲取子視圖


DPoint getContentOffset();

返回值:DPoint

參數(shù):

解釋:獲得內(nèi)容偏移量


void setZoomScale(float zoom);

返回值:void

參數(shù):

類型參數(shù)名說明
floatzoom縮放比例

解釋:設(shè)置縮放比例


virtual bool isReachBoundaryLeft();

返回值:bool

參數(shù):

解釋:是否到達左邊界


virtual bool isReachBoundaryRight();

返回值:bool

參數(shù):

解釋:是否到達右邊界


virtual bool isReachBoundaryUp();

返回值:bool

參數(shù):

解釋:是否到達上邊界


virtual bool isReachBoundaryDown();

返回值:bool

參數(shù):

解釋:是否到達下邊界


void endHeaderRefresh();

返回值:void

參數(shù):

解釋:端頭刷新


void endFooterRefresh();

返回值:void

參數(shù):

解釋:端尾刷新


DPoint getContentOffset();

返回值:DPoint

參數(shù):

解釋:獲取相對于視圖頂部的偏移量


virtual bool ccTouchBegan(CATouch *pTouch, CAEvent *pEvent);

返回值:virtual bool

參數(shù):

類型參數(shù)名說明
CATouch*pTouch觸摸傳遞對象
CAEvent*pEven此參數(shù)待定

解釋:觸摸事件開始時的回調(diào)函數(shù)


virtual void ccTouchMoved(CATouch *pTouch, CAEvent *pEvent);

返回值:virtual void

參數(shù):

類型參數(shù)名說明
CATouch*pTouch觸摸傳遞對象
CAEvent*pEven此參數(shù)待定

解釋:觸摸事件中觸點移動時的回調(diào)函數(shù)


virtual void ccTouchEnded(CATouch *pTouch, CAEvent *pEvent);

返回值:virtual void

參數(shù):

類型參數(shù)名說明
CATouch*pTouch觸摸傳遞對象
CAEvent*pEven此參數(shù)待定

解釋:觸摸事件結(jié)束時的回調(diào)函數(shù)


virtual void ccTouchCancelled(CATouch *pTouch, CAEvent *pEvent);

返回值:virtual void

參數(shù):

類型參數(shù)名說明
CATouch*pTouch觸摸傳遞對象
CAEvent*pEven此參數(shù)待定

解釋:觸摸非正常結(jié)束時的回調(diào)函數(shù)。(例如:電話或鎖屏)


virtual void mouseScrollWheel(CATouch* pTouch, float off_x, float off_y, CAEvent* pEvent);

返回值:virtual void

參數(shù):

類型參數(shù)名說明
CATouch*pTouch觸摸
floatoff_xx坐標偏移量
floatoff_yy坐標偏移量
CAEvent*pEvent事件

解釋:鼠標滾輪


static CAScrollView* createWithFrame(const DRect& rect);

返回值:static CAScrollView*

參數(shù):

類型參數(shù)名說明
const DRect&rect區(qū)域大小

解釋:創(chuàng)建,并指定其Frame,默認Frame為(0,0,0,0)


static CAScrollView* createWithCenter(const DRect& rect);

返回值:static CAScrollView*

參數(shù):

類型參數(shù)名說明
const DRect&rect中心點的位置及大小

解釋:創(chuàng)建,并設(shè)置其Center,默認Center為(0,0,0,0)


virtual bool init();

返回值:virtual bool

參數(shù):

解釋:初始化


void startPullToHeaderRefreshView();

返回值:void

參數(shù):

解釋:開始頂端刷新視圖


virtual void switchPCMode(bool var);

返回值:virtual void

參數(shù):

類型參數(shù)名說明
boolvar開關(guān)

解釋:開關(guān)PC模式

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號