仿射翻译可防止CGPoint重定位

时间:2012-04-02 19:48:43

标签: cgaffinetransform cgpoint

我展开并移动了一个标签(instructionLabel),然后将其恢复为原始大小,但将其保留在新位置。

 [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);

我已经通过Breaks和NSLog验证了CGPointMake和CGRectMake语句已经到达......它们只是在仿射变换后才起作用。有谁知道为什么? (我不想在翻译例程之后立即将标签移回,但如果我无法弄清楚CGPointMake例程为什么不这样做,我可能不得不这样做。)

感谢您的任何建议。 -Rob

1 个答案:

答案 0 :(得分:1)

除非我误认为使用仿射变换进行缩放的主要原因之一是移动等视图,您可以稍后将变换设置为CGAffineTransformIdentity,这将取消您已应用的任何变换。我相信你的问题在于你在应用translate transform之前设置了中心位置。视图确实移动到该点+任何变换应用于该视图。所以只需设置转换标识。