Я думаю, что ваше представление не обновляется, потому что вы никогда не выходите из рекурсии, и поэтому цикл выполнения никогда не заканчивает итерацию. Лучшим решением, чем рекурсивный метод, может быть использование NSTimer
, которое запускает вашу функцию один раз каждые, скажем, 1/30 или 1/60 секунды, используя +[NSTimer timerWithTimeInterval:target:selector:userInfo:repeats:]
.
Если вы хотите сохранить рекурсивную структуру, имеющуюся здесь, вы можете использовать -[NSObject performSelector:withObject:afterDelay:]
для вызова вашей функции после задержки. Просто используйте что-то вроде 1 / 60.0 для задержки и упакуйте любую необходимую информацию в словарь или массив для передачи в параметр withObject:
.
Любой из этих методов регистрирует ваш метод в цикле выполнения, который будет вызван позднее. Это позволяет циклу выполнения начать новую итерацию, что означает, что обновления пользовательского интерфейса могут происходить.
Редактировать: если ваша строка не меняется во время этой анимации, рассчитайте размер текста один раз и сохраните его в переменной экземпляра. Расчет размера строки во время каждого вызова вашего метода может быть дорогостоящим.