3

私はSOの周りを検索していて、いくつかの関連する投稿を見つけましたが、(まだ)私の問題を解決したものはありません。

ストーリーボードにビュー設定があり、IBOuletを介して制約がフックされています。特定のアクションで、ビューは上に(または最初の位置に下に)移動する必要があります。私の一生の間、私はそれを適切に機能させることができません。自動レイアウトの前に、次のコードを実行しました。

- (void)animateStarBackground:(NSString *)animationID
                 finished:(NSNumber *)finished
                  context:(void *)context
                   myView:(UIView *)myView
                     xPos:(float)xPos
                     yPos:(float)yPos {

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.2];
    [UIView setAnimationDelay:0.5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDelegate:self];

    myView.center = CGPointMake(xPos, yPos);

[UIView commitAnimations];

}

以前はうまく機能していましたが、とにかく...これがAutolayoutでは機能しなくなったことは誰もが知っています。だから私はそれを次のように変更しました:

-(void)animateButton:(UIView *)myView {

    [UIView animateWithDuration:8.0f animations:^{
        _viewConstA.constant = 45.0;
        [myView layoutIfNeeded];
    }];

}

アクションが発生すると、ストーリーボードで設定された初期位置から開始するのではなく、左上隅の1x1ピクセルのビューとして開始し、最後の休憩場所に向かって下向きにアニメーション化します(以前のように15ピクセル上に移動するのではありません)。意図したもの)。

ここで、[myViewlayoutIfNeeded]を取り出すと; 一部、アクションはビューを正確に正しい場所に配置します...しかし、そこではアニメーション化されません。ビューが表示されるとすぐにそこにあります。

最初の画面グラブは最初の場所です。2番目のグラブは、ビューの最終的な休憩場所になるはずです。3つ目は、間違った場所と方向からアニメートするビューです。

考え/コメント?私は一体何を間違っているのですか?これはとても簡単だと思いました...私は明らかな何かを見逃している必要があります。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

4

1 に答える 1

6

次のブロックベースのアニメーションをから呼び出すとviewDidLoad、フレームがからCGRectZero最終位置までアニメーション化されます。しかし、これをから呼び出すとviewDidAppear、期待どおりに機能します。

- (void)animateMovementByConstraint
{
    [UIView animateWithDuration:0.5
                     animations:^{
                         self.topLayoutConstraint.constant = 100;
                         [self.view layoutIfNeeded];
                     }];
}

(この例でtopLayoutConstraintは、IBOutletアニメーション化するコントロールの上部の垂直方向の制約に対してInterface Builderで定義したものです。)

自動レイアウトでは、でアニメーションを開始して以来、viewDidAppear問題はありませんでした。

于 2013-03-21T04:17:34.547 に答える