7

我试图让我的 GUI 库的用户不受限制地自定义输入/输出过渡效果,同时仍然保持简单性/防止误用(当控件进入或退出视图时)。

为此,我向 Control 类添加了一个委托,该委托将采用 Control 引用和转换完成百分比,以便用户能够以他想要的任何方式平滑地转换控件的位置/不透明度,基于给定百分比。他所要做的就是在控制入口/出口之前订阅一个转换函数。

但是,我意识到仅使用当前完成百分比来转换/动画控件是不可能的,因为您还必须存储和比较控件的初始位置。
为了使这个存储要求明显,我应该强制使用委托函子吗?

如果是这样,我该如何以简约/干净的方式做到这一点?


随意提出另一种允许用户应用自定义过渡动画的方法!

4

3 回答 3

1

IMO 您不必向控件的用户提供控件的初始位置,因为他可以相对于初始位置定位它:负数用于左侧和顶部,正数用于右侧和底部。

下面的代码是一个快速转换的函数:

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

当您调用委托时,您必须将 Point 添加到控件的初始位置。您必须注意到委托包含一个 Thread.Sleep(X),这必须由用户控制,因为他可能想要执行快速或慢速事务。

您可能还想考虑添加像 jQuery 这样的顺序转换,以便一个转换在另一个转换完成后开始。

祝你好运

于 2012-07-30T09:41:26.660 回答
1

如果我理解正确,您的 Control 会调用 Animation(calculation) 委托(不时地,可能在每一帧上)并传递过渡竞争百分比。然后,动画委托计算并将平移和位置返回/应用到控件。这个对吗?

假设上面是正确的,有几种解决方案:

  1. 仅对位置和不透明度进行动画处理时:

    除了竞争百分比,您还必须在调用委托时发送初始控制状态的位置和不透明度。必须在转换开始时记住初始状态,并在每次调用中发送给委托。

  2. 通常为任意属性设置动画时:

    除了竞争百分比,您还提供了 State 属性(Object 类型甚至更好的 Dictionary)。此 State 属性完全由委托及其动画逻辑控制。

    对于您的控件,State 属性将没有任何语义或含义。您的控件仅必须在后续调用委托之间保留 State 属性的值。

    总而言之,代表在第一次调用时用初始值填充状态,在后续调用中使用这些值 - 做任何它想做的事情。Delegate 还将计算的值应用于 Control。请注意,可以在委托中使用的所有属性都必须是公共的。

于 2012-05-27T09:52:11.350 回答
0

我认为您至少需要将以下参数传递给委托:-

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

通过传递控件本身,用户将获得其所有初始状态信息(例如位置)。此外,如果用户需要设置控件的任何属性,他肯定需要对控件本身的引用。

如果用户需要容器的大小/位置信息,或者如果他需要对容器做一些特殊的控制,他可能需要容器。

于 2012-06-29T12:18:24.593 回答