4

変換を実行しているビューがあります

originalTransform = self.appContainer.transform;
self.appContainer.transform = CGAffineTransformMakeScale(.8, .8);

元の回転

デバイスを回転させない場合は、次を使用してこれを元に戻すことができます

self.appContainer.transform = CGAffineTransformScale(originalTransform, 1, 1);

残念ながら、デバイスを回転すると、ビューの変換マトリックスがビューの回転によって変更され、元のスケールが壊れます。回転後にスケールを元に戻すとUIView、元のフルサイズに戻らないままになります。

回転後

元のスケールの後

元の変換行列と新しい変換行列の間で計算を行う必要があることは確かですが、これを行う方法がわかりません。この作業を行うために私ができた唯一のことは、回転する前にスケールを1に戻すことです

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    self.appContainer.transform = CGAffineTransformScale(originalTransform, 1, 1);
}

そして、その後、新しく変更された変換で再スケーリングします

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation               {
    self.appContainer.transform = CGAffineTransformMakeScale(.8, .8);
}

これで期待どおりに動作しますが、フルスクリーンに戻ってから .8 スケールに戻るのではなく、新しい変換から正しい .8 スケールに移行したいと考えています。

4

2 に答える 2

0

を使用してすべての自動サイズ変更マスクを削除する必要があると思います。

[self.appContainer setAutoresizingMask:UIViewAutoresizingNone];
于 2013-03-15T09:14:48.323 に答える
0

元に戻したい場合は、トランスフォームを CGAffineTransformIdentity に設定してみてください。

self.appContainer.transform = CGAffineTransformIdentity;
于 2012-05-09T16:10:53.080 に答える