0

willrotatetointerfaceorientation メソッドで次のコードを使用しています。

if(UIDeviceOrientationIsLandscape(toInterfaceOrientation))
{
    NSLog(@"willRotateToInterfaceOrientation landscape"); 
    self.textFieldResult.frame = CGRectMake(146, 210, 97, 31);
    self.operationLabel.frame = CGRectMake(73, 210, 120, 21);
}
else if (UIDeviceOrientationIsPortrait(toInterfaceOrientation))
{
    NSLog(@"willRotateToInterfaceOrientation Portrait");   

    self.textFieldResult.frame = CGRectMake(305, 134, 97, 31);
    self.operationLabel.frame = CGRectMake(82, 138, 120, 21);
}

横向きから縦向き、またはその逆のように一度回転すると、これはうまく機能します。しかし、縦向きから逆さまに変更すると、ビューの向きが乱れます! コントロールはelseブロックに入っていますが、方向は本来あるべきものではありません.

私が想定しているのは、CGRect の場合、ビューの原点が親ビューの左上隅に対して指定されているということです。これはウィンドウそのものです。

さらに、ここで指定した座標は、絵コンテで見たものとはまったく異なります。つまり、ほぼ 2 倍か半分です。viewWillAppear メソッドで同じコード (上記と同じ) を使用したい場合は、ビューの同じ配置に別の座標セットを使用する必要があります。この座標は、ストーリーボードに表示されるものと似ています。

CGRect の動作とそれに対応する関数については、明確でない可能性があると思います。

4

1 に答える 1

0

そのビューで CGAffineTransform を使用して、その問題を解決できます。詳細については、こちらをご覧ください: THIS and THIS

于 2012-08-17T09:13:39.943 に答える