Хорошо, в конце концов я обнаружил, что заставляет анимацию не запускаться. Наблюдение за pickerView и всякий раз, когда переменная экземпляра изменяет значение, родительское представление получает уведомление и запускает анимацию, чтобы сдвинуть представление выбора за пределы экрана.
Но поскольку parentView наблюдал как старое, так и новое значение, он получал уведомления два раза: сначала для старого, а затем для нового измененного значения. Таким образом, parentView также запускал анимацию два раза сразу друг за другом, по-видимому, это приводило к тому, что анимация вообще не запускалась.
исправлено так, просто закомментировав первую строку, которая отправляла старое значение своему наблюдателю каждый раз, когда ValueSelectDone изменял значение:
//[self willChangeValueForKey:@"valueSelectDone"];
valueSelectDone = flag;
[self didChangeValueForKey:@"valueSelectDone"];