0

プログラムで制約を追加するのに役立つMasonryライブラリを使用しています。問題はありませんが、ユーザーがデバイスを横向きから縦向きに回転させた後、アンインストールして新しい制約を追加する必要があるという問題に直面しました。私はかなり「残忍な」解決策を試しましたが、それは制約を変更しましたが、ほんの一瞬で「古い」制約を見ることができました。ユーザーがデバイスを回転させた後に制約を追加/削除する簡単な方法はありますか? それが私が試したことです(動作しますが、上記のように数秒で「古い」フレームが表示されました):

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{

    if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){
        [bottomRight mas_updateConstraints:^(MASConstraintMaker *make) {

            NSLog(@"We are on landscape");
            make.top.equalTo(upperRight.mas_bottom).with.offset(20);
            make.left.equalTo(self.view.mas_centerX).with.offset(20);
            make.right.equalTo(bottomRightRight.mas_left).with.offset(-20);
            make.bottom.equalTo(self.view.mas_bottom).with.offset(-100);

            make.width.equalTo(bottomRightRight);

        }]; }
    else {
        NSLog(@"Swapped");
        [bottomRight mas_updateConstraints:^(MASConstraintMaker *make) {

            make.top.equalTo(upperRight.mas_bottom).with.offset(200);
            make.left.equalTo(self.view.mas_centerX).with.offset(200);
            make.right.equalTo(bottomRightRight.mas_left).with.offset(-200);
            make.bottom.equalTo(self.view.mas_bottom).with.offset(-200);

            make.width.equalTo(bottomRightRight);

        }];

    }

}
4

1 に答える 1

1

ユーザーがデバイスを横向きから縦向きに回転させた後、新しい制約をアンインストールして追加する必要があります。私はかなり「残忍な」解決策を試しましたが、それは制約を変更しましたが、ほんの一瞬で「古い」制約を見ることができました。

しかし、それが問題です。ユーザーがデバイスを回転させたに制約を変更しています。つまり、ローテーションが終了した直後に発生するという、好ましくない現象を引き起こしているのはあなたです

正しい解決策は、ユーザーがデバイスを回転させるに制約を変更することです。これを行うと、拘束の変更が回転に合わせて魔法のようにアニメーション化され、変更が完全にシームレスに表示されます。

たとえば、これが iPhone アプリの場合、View Controller を実装してwillTransitionToTraitCollection...そこで制約の変更を行うと、その変更は魔法のように回転に一致します。

于 2016-02-21T23:10:36.497 に答える