Как отменить или повторить RotateTransform? - PullRequest
0 голосов
/ 13 ноября 2018

Я следовал руководству по повороту изображения, привязанного к кнопке, и оно должно быть довольно простым, но я не могу понять это.

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.

В основном то, что я получаю, находится в первой части изображения, а мне нужно, чтобы оно было во второй части.

Basically what I get is in the first part of the Pic, want I need in the second part.

Что я здесь не так делаю? Почему я не могу снова повернуть картинку? Я пробовал с -90, 90 и многими другими значениями, например 45 градусов, но вращение не происходит?

1 Ответ

0 голосов
/ 13 ноября 2018

Это потому, что изображение на самом деле не повернуто, а только повернуто.Пока преобразование 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);

}

Для вашей информации (как я могу прочитать из вашего кода) Вам не нужно менять Angle свойство объекта rotateTransform.rotateTransform.BeginAnimation изменит свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...