Вернуть вид в исходное положение при завершении анимации UIView - PullRequest
0 голосов
/ 15 октября 2011

У меня очень простая анимация 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"];

Ответы [ 2 ]

2 голосов
/ 08 февраля 2014

Перед запуском новой анимации в существующем представлении вы можете сбросить представление, если какой-либо из этих атрибутов был ранее изменен:

// first, don't forget to stop ongoing animations for the view
[theView.layer removeAllAnimations];

// if the view was hidden
theView.hidden = NO;

// if you applied a transformation e.g. translate, scale, rotate..., reset to identity
theView.transform = CGAffineTransformIdentity;

// if you changed the anchor point, this will reset it to the center of the view
theView.layer.anchorPoint = CGPointMake(0.5, 0.5);

// if you changed the alpha, this will reset it to visible
theView.alpha = 1.;
0 голосов
/ 15 октября 2011

Попробуйте поместить строку

[self.view setTransform:aNewTransform];

в блок завершения.

...