Вы не можете связать эти два преобразования вместе в одной анимации так, как вы к ней приближаетесь. Этот CGAffineTransformConcat создает преобразование, которое представляет выполнение одного преобразования за другим. Первый переводит -10 для y, затем второй переводит +10 для y. Если вы делаете их один за другим, вы вернетесь туда, откуда начали. Когда вы назначаете результирующее преобразование слою спрайта, вы просто указываете ему вообще не двигаться.
У вас есть два варианта для достижения того, что вы ищете:
Вариант 1. Посмотрите на анимации ключевых кадров (посмотрите CAKeyframeAnimation). Это позволит вам указать состояние свойств в разных точках с помощью анимации. Это, вероятно, потребует немного больше обучения, но конечный результат, вероятно, будет более читабельным и обслуживаемым.
Вариант 2: две анимации - по одной для каждого перевода. В конце каждой анимации, если вы хотите, чтобы качание продолжалось, запустите другую анимацию. Это может быть запутанным и сложным, если вам нужно будет внести изменения позже.
Также, в любом случае, я бы предложил использовать константу для вашего значения перевода. Магические числа также сделают будущие изменения требующими больших усилий. Вам также следует перейти к использованию блочной анимации для анимации UIView (посмотрите animateWithDuration: animations:)