2

所以我需要创建一个简单的动画,其中视图飞出屏幕,然后根据用户手势再次飞回。我的动画代码(如下)效果很好。实际上它工作得有点太好了。请注意在 enterStage 方法中我如何不重新定位视图。我只是将它的比例设置为 1。视图飞入并在它的原始位置结束就好了。如果我改为使用 CGAffineTransformMakeTranslation 并且不进行缩放,它也可以完美运行。我预计我需要自己跟踪原始大小和位置,但似乎这对我来说有点怪异。

这很神秘。

这些关于原始大小和位置的数据保存在哪里?如果我愿意,我将如何禁用此行为 - 就像我希望视图不记住其原始位置一样?

-(void) exitStage{

    [UIView animateWithDuration:0.5
                          delay:0
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:(void (^)(void)) ^{
                         CGAffineTransform t = CGAffineTransformMakeTranslation(0, -1000);
                         self.transform = CGAffineTransformScale (t, 10.0, 10.0);
                     }
                     completion:^(BOOL finished){
                     }];
}

-(void) enterStage{

    [UIView animateWithDuration:0.5
                          delay:0
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:(void (^)(void)) ^{
                         //self.transform = CGAffineTransformMakeTranslation(0, self.originalYcoord);
                         self.transform = CGAffineTransformMakeScale(1,1);
                     }
                     completion:^(BOOL finished){
                     }];
}
4

1 回答 1

3

在您的输出转换中,您将其平移设置为 (10,10),但在您的输入转换中,您将其转换设置为 1x1 比例转换,其中不包含任何平移,因此只需擦除它即可撤消您的平移

如果您想保持原始转换并对其进行修改,则需要执行类似的操作

self.transform = CGAffineTransformScale(self.transform, 1, 1);
//or
self.transform = CGAffineTransformTranslate(self.transform, 10, 10);
于 2013-03-28T15:41:19.497 回答