На самом деле ответ Томаса должен работать как есть, я добавлю небольшое объяснение, почему бы не использовать сон, как вы это сделали.
Вся обработка пользовательского интерфейса на iPhone (и на большинстве ОС) выполняется только в одном потоке - главном потоке, который выполняет так называемый цикл выполнения. Если вы остановите этот поток, пользовательский интерфейс остановится, ничто не будет отображено.
Помещение sleep в viewDidLoad, который запускается в основном потоке, сделает именно это - остановит пользовательский интерфейс от каких-либо действий. Поэтому, поскольку сразу после пробуждения вы позвонили [self.waitView stopAnimating]
, и представление активности должно скрываться, когда не выполняется анимация, вы вообще его не видите - вы просто не дали ему времени показать.
Томас использовал NSTimer для вызова stopAnimating через 5 секунд - теперь это позволяет основному потоку выполнить код перед остановкой анимации и скрытием waitView, и это будет работать для вашего теста.
Еще лучше, если вы просто дадите ему анимироваться без какого-либо таймера и будете использовать шаблон делегата для информирования кода загрузки tableView после загрузки данных, а затем прекратите анимацию. Вы не знаете, как долго будет длиться загрузка данных, поэтому лучше подождать, пока она не закончится, чем прекратить анимацию после определенного времени.
Ну да, размер и положение имеет смысл, но для тестирования это не имеет значения и не является причиной его невидимости - если не указано, оно будет добавлено в 0,0 и будет иметь размер по умолчанию, так что вы все равно это увидите.