2012-05-20 51 views
7

我試圖給我的GUI庫的用戶無限制地自定義輸入/輸出轉換效果,同時仍保持簡單性/防止誤操作(用於控制進入或退出視圖)。代表實現可擴展性的正確/不正確的代表用法

爲此,我在Control類中添加了一個委託,該委託需要Control引用和轉換完成百分比,以便用戶能夠以任何他想要的方式平滑地轉換控件的位置/不透明度,基於給定的百分比。他所要做的就是在控制入口/出口之前訂閱一個轉換函數。

但是,我意識到僅使用當前完成百分比來轉換/製作控件是不可能的,因爲您還必須存儲和比較控件的初始位置。
爲了使這個存儲需求明顯,我是否應該強制使用委託函數?

如果是這樣,我該如何以簡約/乾淨的方式做到這一點?


隨時提出另一種方式來讓用戶定製應用過渡動畫!

+0

您能粘貼一些您使用的代碼嗎? – 3aw5TZetdf

+0

@MatthewRz它真的不會幫助理解= |這正是我描述它的方式。我可以告訴你這是XNA,我正在修改Nuclex Graphics/GUI庫。 – Griffin

回答

1

如果我正確地理解了你,你的控件調用動畫(計算)委託(時不時地,可能在每一幀上),並通過轉換競爭百分比。 動畫委託人然後計算並返回/應用翻譯和位置到控件。 這是正確的嗎?

假設以上是正確的有幾種解決方案:

  1. 當動畫只有位置和不透明度:

    除了競爭%,你還必須發送的控件的位置初始狀態和不透明調用委託時。在轉換開始時必須記住初始狀態,並在每次調用中將其發送到委託中。

  2. 當一般的動畫任意屬性:

    除了競爭%,你還提供國家財產(對象的類型,甚至更好的解釋)。這個State屬性完全由委託和它的動畫邏輯控制。

    對於您的Control,State屬性將沒有任何語義或含義。 您的控制只能在後續調用委託之間保留State屬性的值。

    把它放在一起,代表在第一次調用時用初始值填充狀態,在隨後的調用中使用這些值 - 做它想做的任何事情。委託也將計算值應用於控制。請注意,可以在委託中使用的所有屬性都必須是公共的。

0

我認爲你需要通過至少以下參數委託: -

  • 控件本身
  • 包含控件容器(如面板)
  • 完成百分比

通過傳遞控件本身,用戶將擁有其所有的初始狀態信息(例如作爲職位)。另外,如果用戶需要設置控件的任何屬性,他肯定會需要對控件本身的引用。

如果用戶需要它的尺寸/位置信息,或者他需要爲控件做一些特殊的事情,用戶可能需要該容器。

1

IMO不必爲控件的用戶提供控件的初始位置,因爲他可以將它放置在相對於初始位置的位置: 負數用於左和頂,正數是右和底部。

下面的代碼是一個快速轉換的功能:

Point FastTranDiagonial(float Percentage){ 
    Thread.Sleep(10); 
    int pixelsDist = (1 - Percentage)* 300;//300 is the maximum distance 
    return new Point(-pixelsDist ,pixelsDist); 
} 

當你調用您必須將點添加到控制的初始位置的代表。您必須注意,委託包含一個Thread.Sleep(X),這必須在用戶的控制之下,因爲他可能想要執行快速或慢速事務。

您可能還想考慮添加像jQuery這樣的順序轉換,以便一個轉換在另一個轉換完成後開始。

好運