Если весь этот код в одном методе или в ответ на одно событие, то ни одно из изменений в представлениях не будет видимым, пока вы не вернетесь в цикл обработки событий. Вы задаете для ActivityIndicator.hidden значение NO, а затем снова задаете для него значение YES, прежде чем пользовательский интерфейс сможет обновиться.
Вы также, очевидно, останавливаете анимацию перед тем, как ее запустить.
Что вам нужно сделать, это сделать индикатор активности видимым и запустить его анимацию. Затем запланируйте работу, которую нужно выполнить (запустите асинхронное сетевое соединение, или поместите некоторую работу в очередь, или все, что вам нужно для выполнения) и вернитесь из этого метода, чтобы пользовательский интерфейс мог обновиться, индикатор мог быть нарисован, и анимация действительно может начаться.
Затем, в какой-то момент , после работа завершена, вы можете скрыть индикатор и остановить анимацию. Но вы не можете сделать все это в главном потоке за один оборот цикла событий. Ни одно из ваших изменений не будет видимым, потому что здесь вообще не будет происходить рисование во время выполнения этого метода (при условии, что это в главном потоке)
Надеюсь, это имеет смысл?