- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WPF 应用程序,其中图像不断旋转,并且偶尔会有某种动画。当应用程序运行时,旋转会保持平稳运行,除了两个关键帧保持相同值的时候。出于演示目的,我将其精简为最基本的内容:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
x:Name="RootElement">
<Window.Resources>
<Storyboard x:Key="Storyboard1">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="image">
<SplineDoubleKeyFrame KeyTime="0" Value="0"/>
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
<SplineDoubleKeyFrame KeyTime="0:0:3" Value="1"/>
<SplineDoubleKeyFrame KeyTime="0:0:4" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource Storyboard1}"/>
</EventTrigger>
</Window.Triggers>
<Grid>
<Image x:Name="image" Source="image.jpg" RenderTransformOrigin="0.5,0.5" >
<Image.RenderTransform>
<RotateTransform Angle="{Binding Angle, ElementName=RootElement}" />
</Image.RenderTransform>
</Image>
</Grid>
该窗口包含一个图像元素,该元素具有 RotateTransform 作为其渲染变换,旋转角度绑定(bind)到窗口代码隐藏中的属性。
还有一个动画,可以在第一秒内将图像的不透明度从 0 渐变到 1,然后在接下来的两秒内将其保持为 1,最后一秒将其从 1 渐变到 0。
隐藏代码如下所示:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1.0 / 30.0);
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
Angle += 360.0 * timer.Interval.TotalSeconds;
}
private DispatcherTimer timer;
private double angle;
public double Angle
{
get { return angle; }
set
{
angle = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Angle"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
有一个 double 类型的属性 Angle,其中包含 RotateTransform 的角度值。它使用 INotifyPropertyChanged 的事件处理程序来通知绑定(bind)项的更改。还有一个每秒触发 30 次的 DispatcherTimer,并且在每次滴答时都会稍微增加 Angle 属性,以便它保持旋转。
如果运行该应用程序,您会发现图像以 30fps 每秒 1 次旋转的速度旋转。它在第一秒内平稳地旋转和淡入,但在不透明度保持为 1 的两秒内,旋转变得非常不稳定。然后,当不透明度开始回退到 0 时,旋转再次变得平滑。
奇怪的是,如果你确保不透明度不保持在 1,这个问题就可以解决:如果你在这两秒内稍微增加它:
<SplineDoubleKeyFrame KeyTime="0:0:3" Value="1.001"/>
...旋转保持平稳。
这是怎么回事?
最佳答案
DispatcherTimer
的默认优先级是Background
。此优先级描述如下:在所有其他非空闲操作完成后处理操作。
由于不透明度没有改变,DoubleAnimationUsingKeyFrames
可能会优化重绘调用,并且无论出于何种原因,这似乎都会影响调度程序队列。
使用 new DispatcherTimer(DispatcherPriority.Normal)
更改调度程序计时器优先级,或实例化另一个 DoubleAnimation
来为角度设置动画,而不是手动设置动画。
关于wpf - 为什么这个旋转动画变得断断续续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24993551/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!