Я думаю, что ограничение, с которым вы сталкиваетесь, связано с тем, что блоки UIView Animation используют Core Animation под капотом, а Core Animation анимирует слой представления, который является копией исходного представления / слоя, который анимация была запланирована на. Таким образом, во время анимации вашего блока позиция презентационного слоя меняется, но позиция модельного представления остается неизменной.
Поскольку вы упомянули, что вы можете обновить позицию просмотра вручную (и позиции подпредставления в противоположном направлении) для достижения желаемого эффекта, рассмотрите возможность создания NSTimer во время графика анимации, которое выполняется 60 раз в секунду (чтобы попытаться поймать каждую анимацию frame), который просто запрашивает у уровня представления текущую позицию (заданную самой анимацией + любые специальные функции синхронизации, указанные в качестве аргумента анимации) и выполняет свою работу по обновлению базовой модели, чтобы она соответствовала этому.
Вы должны иметь возможность запросить позицию анимированного слоя с помощью:
yourUIView.layer.presentationLayer.frame.origin
Затем добавьте блок завершения к вашей анимации, который делает недействительным таймер.
Прежде чем вы сможете получить доступ к свойству слоя представления, вы должны добавить в свой проект
QuartzCore.framework
Приветствия