CGAffineTransformScale и анимация не работают должным образом - PullRequest
2 голосов
/ 18 сентября 2011

Я создаю приложение для сборника рассказов, которое представляет собой серию коротких анимаций. Каждый «поворот страницы» - это просто короткая анимация, когда страница уменьшается. Для page1 анимация работает, как и ожидалось, однако для page2 , если я вызываю действие page2, пока первая анимация еще выполняется, кажется, что она прыгает прямо туда, где page1 в этот момент, игнорируя собственную длительность, задержку и т. д.

В идеале, я бы хотел, чтобы анимация page2 воспроизводилась как собственное уменьшение масштаба, так же, независимо от того, когда он вызывается, что я могу изменить в этом коде.

-(IBAction) page1
{
    pageImageNext.bounds = CGRectMake(-240, -370, 1200, 800);

    [UIImageView animateWithDuration:7.5 delay:2.0 options: UIViewAnimationOptionOverrideInheritedDuration |
                                                            UIViewAnimationOptionAllowUserInteraction animations:^{
        CGAffineTransform zoom = CGAffineTransformScale(CGAffineTransformIdentity, .4, .4); 
        self.pageImageNext.center = CGPointMake(240,160);
        self.pageImageNext.transform = zoom;

    } completion:^(BOOL finished) {}];
}

-(IBAction) page2
{
    pageImageNext.image = [UIImage imageNamed:@"page2.jpg"];
    pageImageNext.bounds = CGRectMake(-240, -370, 1200, 800);

    [UIImageView animateWithDuration:7.5 delay:6.0 options: UIViewAnimationOptionOverrideInheritedDuration |
                                                            UIViewAnimationOptionAllowUserInteraction | 
                                                            UIViewAnimationOptionBeginFromCurrentState animations: ^{
        CGAffineTransform zoom2 = CGAffineTransformScale(CGAffineTransformIdentity, .4, .4);    
        self.pageImageNext.center = CGPointMake(240,160);
        self.pageImageNext.transform = zoom2;

    } completion:^(BOOL finished) {}];
}

Кроме того, строка pageImageNext.bounds = CGRectMake(-240, -370, 1200, 800);, по-видимому, не действует в page2 , поскольку она не изменяет размер UImageView, а скорее "наследует" ее текущий размер от предыдущего преобразования.

Спасибо!

1 Ответ

3 голосов
/ 20 сентября 2011

Я на самом деле не понял, что пошло не так, как описано выше, хотя я понял, что с помощью Core Animation я получаю правильный эффект, используя этот код в каждом IBAction:

pageImageNext.image = [UIImage imageNamed:@"page1.jpg"];
pageImageNext.bounds = CGRectMake(-240, -470, 1200, 800);

CABasicAnimation *zoomOut = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
zoomOut.beginTime = CACurrentMediaTime()+4;
zoomOut.toValue = [NSNumber numberWithDouble:0.4];
zoomOut.duration = 8.0;
zoomOut.fillMode=kCAFillModeForwards;
zoomOut.removedOnCompletion=NO;
[pageImageNext.layer addAnimation:zoomOut forKey:@"zoomOut"];
...