0

私はこれを試しました:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self adjustViewsForOrientation:toInterfaceOrientation];
}
- (void)adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
    if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
    intervalLabel.center = CGPointMake(100, 100);
}
else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
        intervalLabel.center = CGPointMake(200, 200);

    }
}

しかし、うまくいきませんでした。ただし、これを行うと移動します

- (IBAction)sup:(id)sender {
    intervalLabel.center = CGPointMake(100, 100);
}

ところで、ラベルはストーリーボードで作成され、ロードされて(弱い、非アトミック)に設定された私のビューに出力され、ボタンもストーリーボードで作成され、標準のIBActionです

4

1 に答える 1

0

1 つの問題は、呼び出していないことです。

[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

ただし、本当の問題は、(意図的またはその他の方法で) autolayout を使用していて、実際には機能しないセンターをいじろうとしていることにあると思います。

したがって、私の提案-フレームとセンターを設定する「古い方法」を使用する場合は自動レイアウトを無効にするか(ビジュアルデザイナーでUIViewControllerをクリックして「自動レイアウトを使用」のチェックを外します)、または自動レイアウトを使用して試みていることを実行します(追加を意味します/回転時に拘束を変更)。

ストーリーボード エディターで UIViewController の [自動レイアウトを使用] のチェックを外した後、次のように動作しました。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
        _intervalLabel.center = CGPointMake(0, 0);
    } else {
        _intervalLabel.center = CGPointMake(50, 50);
    }    
}

そうは言っても、Autolayout を使用することをお勧めします。

于 2013-09-30T20:49:12.583 に答える