绫波sena,塔罗牌- 占卜大师taluo1519,百花女情倾天下
在许多用户框架中(特别是wpf之前的框架,如windows窗体和mfc),开发人员必须从头构建自己的动画系统。最常用的技术是结合使用计时器和一些自定义的绘图逻辑。wpf通过自带的基于属性的动画系统,改变了这种情况。接下来的两节将描述这两者之间的区别。
一、基于时间的动画
假如需要旋转windows窗体应用程序中的about对话框中的一块文本。下面是构建该解决方案的传统方法:
(1)创建周期性触发的计时器(例如,每隔50毫秒触发一次)。
(2)当触发计时器时,使用事件处理程序计算一些与动画相关的细节,如新的旋转角度。然后使窗口的一部分或者整个窗口无效。
(3)不久后,windows将要求窗口重新绘制自身,触发自定义的绘图代码。
(4)在自定义的绘图代码中,渲染旋转后的文本。
尽管这个基于计时器的解决方案不难实现,但将它继承到普通的应用程序窗口中却非常麻烦。下面是列出这种解决方案存在的一些问题:
基于计时器的动画仍存在一些缺点:导致代码不是很灵活,对于复杂的效果会变得杂乱无章,并且不鞥能得到最佳性能。
二、基于属性的动画
wpf提供了一个更高级的模型,通过该模型可以只关注动画的定义,而不必考虑它们的渲染方式。这个模型基于依赖项属性基础架构。本质上,wpf动画只不过是在一定时间间隔内修改依赖项属性值得一种方式。
例如,为了增大或缩小按钮,可以在动画中修改按钮的宽度。为使按钮闪烁,可修改用于按钮背景的lineargradientbrush画刷的属性。创建正确动画的秘密在于决定需要修改什么属性。
如果希望实现不能通过修改属性实现的其他变化,上述方法就行不通。例如,不能将添加或删除元素作为动画的一部分。同样,不要求wpf在开始场景和结束场景之间执行过渡(尽管一些灵活的变通方法可以模拟这种效果)。最后,只能依赖项属性应用动画,因为只有依赖项属性应用动画,因为只有依赖项属性使用动态的属性识别系统,而该系统将动画考虑在内。
乍一看,wpf动画关注属性的本质看起来有很大的局限性。然而,当使用wpf进行工作时,就会发现它的功能非常强大。实际上,使用每个元素都支持的公共属性可以实现非常多得动画效果。
但许多情况下,基于属性的动画系统不能工作。作为经验法则,基于属性的动画系统是为普通的windows应用程序添加动态的极佳方式。例如,如果希望润色交互性购物工具的前端,基于属性的动画系统将会很完美地工作。然而,如果需要作为应用程序的核心目标苏菲使用动画,并且希望动画在应用程序的整个生命周期中持续运行,可能需要更灵活的、更强大的技术。例如,如果正在创建基本游戏或为模型碰撞使用复杂的物理计算,就需要更好地控制动画。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论