9

私の質問は、ビューの変換を保存およびリセットする方法として要約できると思います。しかし、おそらく私の状況を説明することが役立つかもしれません。

以下の変換をビューに次々に適用すると(このコードをスイッチやボタンに追加する場合など)。期待どおりの結果が得られます。スケールは、元のビューの.55倍のサイズのビューと元のスケールのビューの間で切り替わります。私が望むように、someViewのサブビューもスケーリングするように機能します。広告は無限大。完全。

//tranformScale 1
someView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.55, 0.55 );
//tranformScale 2
someView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0 );

問題は、このコード(または同様のコード)を使用して、iOSデバイスが横向きになったときにself.viewのサブビューを拡大縮小し、横向きの画面にサブビューを合わせる(そして縦向きの場合はバックアップする)ことです。ほとんど機能しますが、何らかの理由で、スケーリングされているビューのフレームのラウンド値の値を出力する代わりに(ボタンを使用して変換を呼び出すテストの場合のように)、徐々に奇妙な値が生成されます。最終的に、約4回転した後、サブビューが画面から飛び出します。self.viewの形状の変化に関係しているのではないかと思いますが、self.viewのフレームをログに記録すると、その形状は非常に予測可能です。

ちなみに、自動レイアウトを使用するのではなく、autoresizingMaskの柔軟なマージンを使用してビューを中央に配置しています。おそらく、別のタイプの計算でビューを中央に配置する必要がありますか?

読んでくれてありがとう!

4

2 に答える 2

34

私はこれをしました、そしてそれは完璧に働きました。

self.imageview.transform = CGAffineTransformIdentity
于 2014-11-13T14:38:51.037 に答える
7

(1)変換を適用した後、フレームデータを設定または取得しないように注意してください。これはサポートされておらず、予測できない結果をもたらします。

(2)自動サイズ変更マスクのフレックスマージンをオフにして、次のように中央に配置します。

   view.center = CGPointMake(view.superview.bounds.size.width/2, 
                             view.superview.bounds.size.height/2);

(ビューがフルサイズのときにセンタリングを適用するように注意してください。つまり、サイズ変更変換の場合は変換前、ID変換の場合は変換後)

于 2013-01-08T14:41:12.330 に答える