2013-03-28 110 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

信息保存在變換屬性中,當操作系統去繪製對象時,它將變換應用於任何需要繪製的東西 –