2

嗨,我完全对 CGAffineTransform 动画感到困惑。我要做的就是将精灵从右侧的位置移动到左侧的位置。当它停止时,我想“重置”它,即将它移回它开始的地方。如果应用程序退出(多任务处理),我想在开始时再次重置位置并重复动画。

这是我用来制作动画的..

    [UIImageView animateWithDuration:1.5
                                   delay:0.0 
                                 options:(UIViewAnimationOptionAllowUserInteraction |
                                          UIViewAnimationOptionCurveLinear 
                                          )
                              animations:^(void){

                                  ufo.transform = CGAffineTransformTranslate(ufo.transform, -270, 100);

                              }
                              completion:^(BOOL finished){
                                  if(finished){
                                      NSLog(@"ufo finished");

                                      [self ufoAnimationDidStop];
                                  }
                              }];

据我了解,CGAffineTransforms 只是在视觉上使精灵看起来像是被移动了,但实际上并没有移动它。因此,当我尝试使用“重置”位置时

ufo.center = CGPointMake(355, 70);

它什么也没做。

如果我打电话,我确实有一些工作

ufo.transform = CGAffineTransformTranslate(ufo.transform, 270, -100);

它重置。问题是如果我在动画中途退出应用程序,那么当它重新启动时,它不一定从头开始,也没有去正确的地方,它基本上会发疯!

有没有办法只删除应用到它的任何转换?我正在考虑只使用一个计时器,但是当这种方法应该起作用时,这似乎很愚蠢。我已经为此苦苦挣扎了一段时间,因此我们将不胜感激。

谢谢

4

1 回答 1

4

对视图应用变换实际上并不会改变视图的中心或边界;它只是改变了视图在屏幕上的显示方式。您希望将转换设置回 CGAffineTransformIdentity 以确保它看起来像“正常”。您可以在开始动画之前将其设置为该值,并将其设置为您想要动画的对象。

于 2010-11-22T22:12:20.913 回答