1

Я пытаюсь объединить анимации вместе, используя несколько CGAffineTransforms и CGAffineTransformConcats. Общая цель, которую я пытаюсь достичь, - заставить мое изображение вращаться на 45 градусов, перемещаясь вверх на 50 пикселей, затем поворачивайте еще 45 градусов по пути назад.Странный результат с использованием CGAffineTransform

CGAffineTransform translateUp = CGAffineTransformMakeTranslation(0, -50); 
    CGAffineTransform firstSpin = CGAffineTransformMakeRotation(M_PI_4); 
    CGAffineTransform translateDown = CGAffineTransformMakeTranslation(0, 50); 
    CGAffineTransform secondSpin = CGAffineTransformMakeRotation(M_PI_4); 
    CGAffineTransform transform1 = CGAffineTransformConcat(translateUp, firstSpin); 
    CGAffineTransform transform2 = CGAffineTransformConcat(translateDown, secondSpin); 
    CGAffineTransform transformFull = CGAffineTransformConcat(transform1, transform2);  
    [UIView beginAnimations:@"MoveAndRotate" context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:0.5]; 
    mainCharacterImage.transform = transformFull; 
    [UIView commitAnimations]; 

Теперь помните, что я довольно новичок во всем, что связано с CG, но я не понимаю, почему это не работает.

Однако я не считаю, что это не работает, чтобы быть странной частью, мой вопрос в основном заключается в том, может ли кто-нибудь объяснить мне, почему приведенный выше код заставляет мое изображение не только двигаться вверх и вращаться , но для перемещения примерно 100 пикселей вправо?

Любые предложения очень ценятся!

ответ

5

Потому что transformFull является результатом умножения матрицы ((translateUp * firstSpin) * (translateDown * secondSpin)). Ваша анимация идет непосредственно от начальной точки к результату вычисления этого матричного умножения, который бывает:

0, 1, 0 
-1, 0, 0 
50 - 25 * sqrt(2), 25 * sqrt(2), 1 

Эта матрица преобразования просто случается, чтобы переместить элемент около 100 пикселей вправо.

Матрица преобразования не имеет истории. Он не может определить, какие шаги достигли этого значения и пройти эти шаги. Вместо этого вы должны сознательно переходить на каждый шаг. Попробуйте сделать эту анимацию в два этапа. Переместите mainCharacterImage на номер transform1. Затем перейдите к новому преобразованию, которое является просто поворот π/2.

Смежные вопросы