1. 程式人生 > >FairyGUI筆記:ScrollPane(十)

FairyGUI筆記:ScrollPane(十)

  • ScrollPane

當元件的“溢位處理”設定為“滾動”後,可以通過GComponent.scrollPane使用滾動相關的功能,例如:

ScrollPane scrollPane =  aComponent.scrollPane;
//設定滾動位置為100畫素
scrollPane.posX = 100;
//滾動到中間位置,帶動畫過程
scrollPane.SetPercX(0.5f, true);

當你增刪子元件後,或者移動子元件的位置、調整子元件的大小,容器是自動更新滾動區域的,不需要呼叫任何API。這個刷新發生在本幀繪製之前。如果你希望立刻訪問子元件的正確座標,那麼可以呼叫EnsureBoundsCorrect

通知GComponent立刻重排。EnsureBoundsCorrect是一個友好的函式,你不用擔心重複呼叫會有額外效能消耗。

  • viewWidth viewHeight 視口寬度和高度。

  • contentWidth contentHeight 內容高度和寬度。

  • percX percY SetPercX SetPercY 獲得或設定滾動的位置,以百分比來計算,取值範圍是0-1。如果希望滾動條從當前值到設定值有一個動態變化的過程,可以使用Set方法,它們提供了一個是否使用緩動的引數。

  • posX

     posY SetPosX SetPosY 獲得或設定滾動的位置,以絕對畫素值來計算。取值範圍是0-最大滾動距離。垂直最大滾動距離=(內容高度-視口高度),水平最大滾動距離=(內容寬度-視口寬度)。如果希望滾動條從當前值到設定值有一個動態變化的過程,可以使用Set方法,它們提供了一個是否使用緩動的引數。

  • currentPageX currentPageY setCurrentPageX setCurrentPageY 如果滾動設定為頁面模式,那麼可以通過這些方法設定或者獲得當前的頁面索引。如果要獲得頁面數量,可以用contentWidth/viewWidth或者contentHeight/viewHeight。

  • ScrollLeft ScrollRight ScrollUp ScrollDown 向指定方向滾動N*scrollStep。例如,如果scrollStep=20,那麼ScrollLeft(1)表示向左滾動20畫素,ScrollLeft(2)表示向左滾動40畫素。注意:如果滾動屬性設定了貼近元件,例如元件大小為41畫素,則需要滾動距離超過20畫素,才能真正發生滾動,那麼如果呼叫ScrollLeft(1),在scrollStep=20的情況下,會導致看不到任何效果。
    如果滾動設定為頁面模式,那這幾個API也有“翻一頁”的作用。

  • ScrollToView 調整滾動位置,使指定的元件出現在視口內。

  • touchEffect 開啟或關閉觸控滾動功能。關閉觸控滾動後,使用者就不能拖拽視口進行滾動了。

  • scrollStep 這個值是指滾動“一格”的距離。這個距離有三個用途:a)scrollUp/scrollDown/scrollLeft/scrollRight; b)點選滾動條的箭頭按鈕; c)滑鼠滾輪,滑鼠滾輪滾一次的距離是scrollStep*2。

  • bounceBackEffect 可以開啟或關閉邊緣回彈功能。

  • mouseWheelEnabled 開啟或關閉滑鼠滾動支援。

  • decelerationRate 減速率,調整這個值可以控制慣性滾動的距離和時間。慣性滾動是指手指拖動一定距離然後釋放後,滾動容器內容繼續滾動一定距離後停止。越接近1,減速越慢,意味著滑動的時間和距離更長。預設值是UIConfig.defaultScrollDecelerationRate。

  • CancelDragging 當滾動面板處於拖拽滾動狀態或即將進入拖拽狀態時,可以呼叫此方法停止或禁止本次拖拽。

可以偵聽滾動改變,在任何情況下滾動位置改變都會觸發這個事件。

/Unity/Cry
scrollPane.onScroll.Add(onScroll);
//AS3
scrollPane.addEventListener(Event.SCROLL, onScroll);
//Egret
scrollPane.addEventListener(ScrollPane.SCROLL, this.onScroll, this);
//Laya,注意是用元件偵聽,不是ScrollPane
aComponent.on(fairygui.Events.SCROLL, this, this.onScroll);
//Cocos2dx,注意是用元件偵聽,不是ScrollPane
aComponent->addEventListener(UIEventType::Scroll, CC_CALLBACK_1(AClass::onScroll, this));

和滾動相關的事件還有:

  • ScrollEnd 慣性滾動結束後回撥。
  • PullDownRelease 下拉重新整理回撥。
  • PullUpRelease 上拉重新整理回撥。
//Unity/Cry
scrollPane.onScrollEnd.Add(onScrollEnd);
scrollPane.onPullDownRelease.Add(onPullDownRelease);
scrollPane.onPullUpRelease.Add(onPullUpRelease);
//AS3
scrollPane.addEventListener(ScrollPane.SCROLL_END, onScrollEnd);
scrollPane.addEventListener(ScrollPane.PULL_DOWN_RELEASE, onPullDownRelease);
scrollPane.addEventListener(ScrollPane.PULL_UP_RELEASE, onPullUpRelease);
//Egret
scrollPane.addEventListener(ScrollPane.SCROLL_END, this.onScrollEnd, this);
scrollPane.addEventListener(ScrollPane.PULL_DOWN_RELEASE, this.onPullDownRelease, this);
scrollPane.addEventListener(ScrollPane.PULL_UP_RELEASE, this.onPullUpRelease, this);
//Laya,注意是用元件偵聽,不是ScrollPane
aComponent.on(fairygui.Events.SCROLL_END, this, this.onScrollEnd);
aComponent.on(fairygui.Events.PULL_DOWN_RELEASE, this, this.onPullDownRelease);
aComponent.on(fairygui.Events.PULL_UP_RELEASE, this, this.onPullUpRelease);
//Cocos2dx,注意是用元件偵聽,不是ScrollPane
aComponent->addEventListener(UIEventType::ScrollEnd, CC_CALLBACK_1(AClass::onScrollEnd, this));
aComponent->addEventListener(UIEventType::PullDownRelease, CC_CALLBACK_1(AClass::onPullDownRelease, this));
aComponent->addEventListener(UIEventType::PullUpRelease, CC_CALLBACK_1(AClass::onPullUpRelease, this));