У меня очень простая анимация UIView, которая заставляет мой взгляд «пульсировать»:
[UIView animateWithDuration:0.2 delay:0.0f options:UIViewAnimationOptionAllowUserInteraction+UIViewAnimationOptionRepeat+UIViewAnimationOptionAutoreverse animations:^{
CGAffineTransform transf = CGAffineTransformScale(self.view.transform, 1.05f, 1.05f);
[self.view setTransform:transf];
} completion:nil];
В какой-то момент пользователь нажимает кнопку, чтобы отменить анимацию и применить новое преобразование.
[self.view.layer removeAllAnimations];
[self.view setTransform:aNewTransform];
Мне бы хотелось, чтобы оно вернулось к исходному преобразованию, но вместо этого оно увеличилось в размере на 5%.
Редактировать: я попытался добавить блок завершения, который сбрасывает преобразование в егоисходная позиция.Это работает, но приводит к тому, что преобразование, которое я запускаю сразу после того, как растоптано ... блок завершения запускается ПОСЛЕ применения aNewTransform
.
Редактировать 2: я нашел решение, используя CABasicAnimation вместо анимаций UIView,Мне все равно было бы интересно, если бы кто-нибудь нашел решение с использованием анимации UIView ... Мне больше нравится интерфейс на основе блоков.Это также работает только потому, что я отслеживаю значение своей шкалы отдельно от значения, примененного к представлению.Все, что изменяет масштаб, использует метод, который также меняет self.scale
Моя замена анимации:
CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
basicAnimation.toValue = [NSNumber numberWithFloat:self.scale*1.05f];
basicAnimation.fromValue = [NSNumber numberWithFloat:self.scale];
basicAnimation.autoreverses = YES;
basicAnimation.duration = 0.2;
basicAnimation.repeatCount = HUGE_VALF;
[self.view.layer addAnimation:basicAnimation forKey:@"Throb"];