1

ラベル (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 ルーチンがそれを行わない理由がわからない場合は、そうする必要があるかもしれません。)

提案をありがとう。-ロブ

4

1 に答える 1

1

ビューのスケーリング、移動などにアフィン変換を使用する主な理由の 1 つを間違っていない限り、後で変換を CGAffineTransformIdentity に設定すると、適用した変換がすべてキャンセルされます。ここでの問題は、変換変換を適用する前に、これまでの位置に中心を設定していることだと思います。ビューは実際にそのポイントに移動します+そのビューに適用される変換は何でも。したがって、変換 ID を設定するだけです。

于 2012-04-25T18:21:21.837 に答える