Хорошо, если я правильно понял вопрос, вы пытаетесь создать анимацию и остановить ее в середине.
В этом случае я бы предложил вам использовать некоторую переменную «state» для хранения состояния анимации (например, свойство frame). Эту переменную вы можете использовать в дальнейшем коде, чтобы поместить анимируемый объект в правильное положение. Это можно сделать в функции animationDidStop ( animationDidStop: закончено: ). Для реализации этой функции вам нужно будет использовать делегирование. Это означает установить AppNameViewController (или некоторый другой уникальный объект для всего приложения) в качестве делегата для анимации и записать реализацию в его m-файл. Это позволит вам запустить код «Настройка положения» в конце анимации.
Следующая задача - сохранить состояние анимации. При запуске анимации платформа Core Animation создает группу промежуточных слоев (слоев представления). И эти слои отображаются во время анимации, а затем они удаляются. И когда анимация завершает выполнение, объект просто переводится в конечное состояние. На самом деле вы должны установить это, когда создаете так называемую «явную анимацию» (и если вы этого не сделаете, анимация будет воспроизводиться, но объект в конце отскочит). Каждый из этих слоев представления имеет набор или собственную копию всех свойств, которые называются «анимируемые свойства». Когда в качестве ключа для анимации установлено одно из свойств анимации, Core Animation вызывает (BOOL) needsDisplayForKey , который возвращает YES / NO. Он сообщает Core Animation, требуется ли для изменения указанного ключа повторное отображение слоя. «Повторное отображение» означает вызов метода drawInContext для уровня представления. Здесь вы можете получить свойства слоя презентации, который отображается в данный момент, и поместить их в переменную состояния.
Анимация воспроизводится в потоке, и для задания переменной состояния я использовал делегирование. Требуется создать подкласс CALayer (скажем, AnimLayer) и определить в нем протокол только с одним методом, который хранит «состояние». Этот метод имеет один параметр, который является состоянием. Затем я реализовал метод протокола, который сохраняет состояние в классе AnimLayer, и установил уникальный объект в качестве делегата. Таким образом, эти слои представления (копии AnimLayer) сами не хранят состояние. Вместо этого значение «состояние», переданное в качестве параметра функции-делегату, сохраняется уникальным объектом в главном потоке.
Я сделал что-то подобное, но моя задача была немного другой. Я не знаю более простой способ, извините. Надеюсь, это поможет.