2013-03-28 76 views
2

所以我需要创建一个简单的动画,其中一个视图从屏幕上飞下来,然后再次基于用户手势飞回来。我的动画代码(如下)效果非常好。其实它有点太好了。请注意,enterStage方法中我没有重新定位视图。我只是将它的比例设置为1.视图飞入并且处于原始位置就好了。如果我改用CGAffineTransformMakeTranslation而不做缩放,它也可以很好地工作。我预计我需要跟踪自己的原始大小和位置,但看起来好像这件事对我来说有点神秘。UIView animateWithDuration返回原始状态

这是神秘的。

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

-(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){ 
        }]; 
} 

回答

3

在你出过渡设置其翻译去(10,10),但在你进入过渡,设置其转换为一个1x1的尺度变换,不含任何翻译,因此,简单地撤消你的翻译只是删除它

如果你想保持原来的改造,并进行修改它,你需要做的是这样

self.transform = CGAffineTransformScale(self.transform, 1, 1); 
//or 
self.transform = CGAffineTransformTranslate(self.transform, 10, 10); 
+1

+1,是啊,这一个。 – 2013-03-28 15:42:10

+0

...但是那里的信息被保存在哪里? UIView的框架是否保持不变,并且不会被变换修改?我没有检查过。 – NFG

+0

信息保存在变换属性中,当操作系统去绘制对象时,它将变换应用于任何需要绘制的东西 –