Почему-то что-то в моем коде отключает анимацию, и я не могу ее найти. Я создал панель поиска в своем приложении, у нее есть вызов делегата для начала и конца редактирования. Когда он начинается, у меня есть блок анимации, чтобы изменить его размер, и он работает, но анимация, когда она заканчивается, не работает. Я прокомментировал КАЖДУЮ строку кода, за исключением анимаций и вызовов делегатов, и даже задал задержки на блоках анимации, и он всегда устанавливается мгновенно, но взаимодействие с объектами задерживается на время анимации. Есть ли причина, по которой анимация отключена, или общий способ выяснить, почему анимация пропущена?анимация UIView не работает
EDIT: Даже отключив весь код для делегатов и имеющий блок анимации с задержкой не работает, кнопка сливают и вызывает
- (void)cancelButtonPressed:(id)sender {
[UIView animateWithDuration:5.0f delay:5.0f options:0 animations:^{
self.layer.borderWidth = 1.0f;
self.layer.borderColor = [UIColor redColor].CGColor;
} completion:^(BOOL finished) {
}];
}
, которая происходит мгновенно, даже не задерживает на 5 секунд.
EDIT 2: Я положил код анимации в другой блок, который может выполнить код внутри после задержки, код действительно задерживается, но анимация все еще не работает.
Редактировать 3: Вот код кнопки, вызывающей метод cancelButtonPressed.
cancelButton = [UIButton buttonWithType:UIButtonTypeSystem];
[cancelButton setTitle:NSLocalizedString(@"Cancel", @"Cancel") forState:UIControlStateNormal];
cancelButton.translatesAutoresizingMaskIntoConstraints = NO;
[cancelButton addTarget:self action:@selector(cancelButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:cancelButton];
Edit 4: Вот видео вопроса анимации. Когда я нажимаю кнопку отмены, она мгновенно сокращается, но код находится в блоке анимации, который должен занять 5 секунд, вот видео и код.
Видео: http://cl.ly/3x3k3H2m1Y2F
barItem является элементом UIBarButton, его customView мой поиск бар UIView подкласс.
[UIView animateWithDuration:5.0f animations:^{
barItem.width = 200;
CGRect addressBarFrame = barItem.customView.frame;
addressBarFrame.size.width = 200;
barItem.customView.frame = addressBarFrame;
} completion:^(BOOL finished) {
NSLog(@"COMPLETION!");
}];
Edit 5: Что Im действительно пытается сделать: приложение Я работаю на это веб-браузер. Я создал пользовательский режим поиска. Вид находится в UIBarButtonItem, который находится внутри UIToolbar, прикрепленного к верхней части экрана. Когда пользователь забирает элемент бара, текстовое поле становится активным, и клавиатура отображается, а рамка просмотра внутри анимируется, и появляется кнопка отмены (все еще часть этого подкласса UIView в строке поиска). Когда кнопка отмены нажата, он вызывает метод внутри подкласса, и он выполняет некоторую очистку, а затем вызывает его метод делегирования на мой UIViewController, который затем будет анимировать рамку снова, чтобы стать больше. Причина, по которой мне нужно изменить фрейм, состоит в том, что, если текстовое поле становится слишком маленьким, мне нужно сделать его больше при редактировании, но тогда это может сделать его меньше при редактировании.
Проблема. Когда текстовое поле становится активным, кадр изменяется внутри блока анимации. Кадр правильно анимируется в течение заданного времени и нового набора кадров. Когда нажата кнопка отмены, вызывается другой блок анимации, чтобы снова изменить кадр, но независимо от того, находится ли этот блок анимации в методе делегата или в подклассе UIView или что я пытаюсь оживить, будет активизировано NOT. Если я добавлю задержку в блок анимации, он все равно будет действовать так, как если бы код вызывался вне блока анимации, хотя блок завершения вызывается в нужное время и если я помещаю блок анимации внутри блока, который может задерживаться код будет правильно задерживаться, но анимация все равно не произойдет. Краны также не влияют на представление, пока не будет сделано время анимации, как обычно.
Редактирование 7: Если i анимация рамки cancelButtons или цвет фона, он будет работать. Поэтому я подумал, может быть, это проблема с панелью инструментов, в которой он находится, но анимирует цвет фона, который также работает.Поэтому я до сих пор не знаю, почему я могу анимировать рамку элемента панели и пользовательский вид (пользовательский вид в коде выше) перед редактированием, но не может его анимировать после редактирования.
Редактировать 8: Я выяснил проблему. Это была оптическая иллюзия все время. Несмотря на то, что настройка ширины UIBarButtonItem внутри блока анимации, окружающие элементы бара автоматически переместились бы в новый кадр. И хотя кадр действительно анимируется, подвиды автоматически находятся в правильном месте, но последовательность анимации заставила его выглядеть так, будто он действительно оживлял все правильно. Анимация, которую я пыталась сделать при редактировании, была более заметной, поэтому я думал, что это не анимация. Изменение вокруг некоторых вещей делает его выглядеть лучше, но я не думаю, что его возможно, чтобы элементы кнопки панели оживили то, что я хочу.
Можете ли вы попытаться поместить некоторый NSLog в блок «законченный» и посмотреть, когда он печатается или вообще печатается. Это может дать некоторое представление о том, что на самом деле происходит. – Yogi
Что такое слой здесь? – sanjeet
Я не уверен, что '0' является даже допустимым значением параметра "options". Это может вызвать странное поведение. См. Ссылку на класс UIView и используйте допустимое значение, например «UIViewAnimationOptionCurveEaseInOut». Кроме того, если у вас нет блока завершения, вы можете просто использовать «NULL» для этого параметра. Опять же, см. Ссылку на класс UIView. –