第二十二章:动画(六)

复合动画
您可以混合等待和未等待的调用来创建复合动画。 例如,假设您希望按钮在大小扩展的同时旋转360度然后收缩。
ViewExtensions类定义一个方法名称ScaleTo,它为Scale属性设置动画,就像RotateTo为Rotate属性设置动画一样。 Button大小的扩展和收缩需要两个连续的动画,但这些动画应该与旋转同时发生,这只需要一次调用。 因此,RotateTo调用可以在没有await的情况下执行,并且当该动画在后台运行时,该方法可以对ScaleTo进行两次顺序调用。
在AnimationTryout中尝试:

async void OnButtonClicked(object sender, EventArgs args)
{
    button.Rotation = 0;
    button.RotateTo(360, 2000);
    await button.ScaleTo(5, 1000);
    await button.ScaleTo(1, 1000);
}

持续时间比正常时间长,这样你就可以看到发生了什么。 RotateTo方法立即返回,第一个ScaleTo动画从那时开始。 但是,等待第一个ScaleTo上的运算符会延迟第二个ScaleTo的调用,直到第一个ScaleTo完成。 那时,RotateTo动画只完成了一半,Button旋转了180度。 在接下来的1,000毫秒内,RotateTo几乎在第二个ScaleTo动画完成的同时完成。
这是按钮,因为它正在通过动画:
2019_03_01_171052
因为OnButtonClicked方法使用async关键字标记,并且第一个RotateTo没有await运算符,所以您将从编译器收到一条警告消息,指出:“因为不等待此调用,所以当前方法的执行在 通话完成。 考虑将'await'运算符应用于调用的结果。“
如果您不想看到该警告消息,可以使用禁用该特定警告的#pragma语句将其关闭:

#pragma warning disable 4014

您可以将该语句放在源代码文件的顶部,以禁用整个文件中的警告。 或者您可以将其置于违规通话之前,并在通话后重新启用这些警告:

#pragma warning restore 4014
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值