2012-04-02 87 views
1

我展開並移動了一個標籤(instructionLabel),然後將其恢復到原始大小,但將其留在新的位置。仿射轉換可防止CGPoint轉移

[UIView animateWithDuration:0.5 
        animations:^{ 
         CGAffineTransform scale = CGAffineTransformMakeScale(2.0, 2.0); 
         CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, -70.0); // up 70 
         self.instructionsLabel.transform = CGAffineTransformConcat(scale,translate); 
        } 
        completion:^(BOOL finished) { 
         [UIView animateWithDuration:0.25 
             animations:^{ 
              CGAffineTransform scale = CGAffineTransformMakeScale(1.0,1.0); 
              CGAffineTransform translate = CGAffineTransformMakeTranslation(0,-70.0); //left in place up 70 
              self.instructionsLabel.transform = CGAffineTransformConcat(scale, translate); 
             } 
             completion:^(BOOL finished) {} 
         ]; 

後來,我明確地使用CGPointMake把標籤放回原來的位置,但是(從原來的地方70分以上)仍然在平移位置。

instructionsLabel.frame = CGRectMake(384, 601, 655, 40); 
//Adding this doesn't make any difference, in or out. 

instructionsLabel.center=CGPointMake(384, 601); 

我已經休息和NSLog的驗證了CGPointMake和CGRectMake語句達到...他們只是不仿射變換後的工作。有誰知道爲什麼? (我不想在翻譯過程後立即將標籤移回,但如果我不知道爲什麼CGPointMake例程不這樣做)。

感謝您的任何建議。 -Rob

回答

1

除非Im的主要原因使用仿射變換規模弄錯一個,移動等的觀點是,你可以在以後設置轉化爲CGAffineTransformIdentity這將抵消你所應用的任何轉變。我相信你的問題在於,在你應用翻譯變換之前,你正在設置中心位置。視圖確實移動到了這一點+任何變換適用於該視圖。所以只需設置變換標識。