1

親View Controllerが画面に表示されたときに少し上に移動しようとしているUIViewがあります。私はこれについて読んでいますが、ほとんどの場合、viewDidAppear メソッドを使用してレイアウトを視覚的に調整するように見えます。私はこれを試しましたが、うまくいかないようです。何も起こらず、origin.y を nslog にしましたが、-47,000 が返されました。これは、何かがまだ初期化されていないことを示している可能性があります。これが私が試したことです。

  - (void) viewDidAppear:(BOOL)animated
    {
        // set the save view y postion
       saveData.center = CGPointMake( 0.0f, 0.5f );
        NSLog(@"This is the y %f", saveData.frame.origin.y);
        NSLog(@"This is the center points on load %@", NSStringFromCGPoint(optionalData.center));
    }

しかし、viewDidLoad メソッドに遅延メソッド呼び出しを追加する場合、次のようにします。

[self performSelector:@selector(moveSaveView) withObject:nil afterDelay:0.7f];

これがあれば、うまくいきます

- (void) moveSaveView
{
    // set the save buttons y postion


    [UIView animateWithDuration:0.5 delay:0.0 options:0 animations:^{
        // Animate the alpha value of your imageView from 1.0 to 0.0 here
        optionalData.alpha = 0.0f;
    } completion:^(BOOL finished) {
        // Once the animation is completed and the alpha has gone to 0.0, hide the view for good
        optionalData.hidden = YES;
    }];

    // move the save button up
    [UIView animateWithDuration:0.5
                     animations:^{saveData.center = CGPointMake( 160.0f, 280.5f );}];


    saveData.center = CGPointMake( 160.0f, 280.5f );
}

自動レイアウトを使用しているため、これも問題ですか? ビューを必要な場所から開始したいだけで、それを実現するために遅延呼び出しを使用しないでください。

編集: だから私はこれを試してみて、UIViewを動かそうと思いついた:

- (void) viewDidAppear:(BOOL)animated
    {   
        NSLog(@"this is the constraing %f",     saveData.saveButtomConstraint.constant);  // gives me 93 which is here its at.
        saveData.saveButtomConstraint.constant = 32;
        [saveData setNeedsUpdateConstraints];
        [saveData layoutIfNeeded];
        NSLog(@"this is the constraing %f", saveData.saveButtomConstraint.constant); // gives me 32 which is here its at.   
    }

問題は、ビューが画面上で移動しないことです。私は何が欠けていますか?また、同じ質問に関連する場合、このように投稿および編集しても問題ありませんか? 私はまだこのフォームのコツをつかもうとしています。

4

1 に答える 1

1

はい、問題は自動レイアウトを使用していることが原因です。フレーム アニメーションは自動レイアウトと互換性がないため、ビューの制約をアニメーション化する必要があります。詳細については、この回答を確認してください。これも役立つ場合があります。幸運を!

編集

saveData UIViewしたがって、呼び出された にプロパティを追加したようですsaveButtomConstraint。その制約にアクセスできるので、これは良いことです。ただし、その制約が実際に[saveData constraints]配列のメンバーであると確信していますか? 通常、Interface Builder の制約は親 UIView に追加されます。問題は間違ったビューで呼び出している可能性が最も高いと思いますlayoutIfNeeded。saveData の親ビュー、またはおそらくビュー コントローラーのルート ビューで呼び出す必要があります[self view]

于 2013-11-11T21:59:16.940 に答える