如何反转或重复RotateTransform?

How to reverse or repeat RotateTransform?

我按照一个关于旋转绑定到按钮的图片的教程,它应该很简单,但我无法弄清楚。

private void rotateMenu()
{
    int rotateAngle;

    if (menuState) rotateAngle = -90;
    else rotateAngle = 90;

    DoubleAnimation myanimation = new DoubleAnimation(0, rotateAngle, new Duration(TimeSpan.FromMilliseconds(222)));

    var rotateTransform = new RotateTransform(rotateAngle, 24.5, 24.5);
    menuButtonImage.RenderTransform = rotateTransform;

    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, myanimation);

}

第一次按下按钮 - 将图片旋转 90 度。简单,有效。

现在我想反转旋转或再旋转 90 度。 动画效果很好,但结果总是切换回旋转 90 度的图片,无论我将第二个 rotateAngle 设置为什么。

基本上我得到的是图片的第一部分,想要我需要的是第二部分。

我在这里做错了什么?为什么我不能再次旋转图片?我尝试使用 -90、90 和许多其他值,例如45 度,但没有发生旋转?

那是因为图片实际上并没有旋转,而只是呈现旋转了。在 rendertransform 获得新的变换之前,它将保持旋转状态。

这会把它旋转回来,所以你可以试试:

DoubleAnimation myanimation2 = 
    new DoubleAnimation(0, new Duration(TimeSpan.FromMilliseconds(222)));

仅使用 toValue 参数重载将其旋转回来。


我会做类似的东西:

// initial angle is 0
RotateTransform _rotateTransform = new RotateTransform(0.0, 24.5, 24.5);
Duration _rotationSpeed;

private void CreateRotation()
{
    _rotationSpeed = new Duration(TimeSpan.FromMilliseconds(222));
    menuButtonImage.RenderTransform = _rotateTransform;
}


private void rotateToSide()
{
    DoubleAnimation myanimation = new DoubleAnimation(90, _rotationSpeed);

    _rotateTransform.BeginAnimation(RotateTransform.AngleProperty, myanimation);

}

private void rotateToDefault()
{
    DoubleAnimation myanimation = new DoubleAnimation(0, _rotationSpeed);

    _rotateTransform.BeginAnimation(RotateTransform.AngleProperty, myanimation);

}

供您参考(我可以从您的代码中读到)您不必更改 rotateTransform 对象的 Angle 属性。 rotateTransform.BeginAnimation 将改变 属性.