1

ビューコントローラを2つUIImageView埋めています。最初は上半分を埋め、2つ目は下半分を埋めています。ストーリーボードファイルに直接設定しました。

このviewDidLoadメソッドでは、2つのアニメーションを実行するためのコードを設定してUIImageViewいます。これにより、バスケットが開いたように見えます(最初UIImageViewはビューから出るまで上にUIImageView移動し、2番目は下に移動します)。ビューから出るまでビューの)。

これはこれまでの私のコードです:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    CGRect basketTopFrame = self.basketTop.frame;
    basketTopFrame.origin.y = -basketTopFrame.size.height;

    CGRect basketBottomFrame = self.basketBottom.frame;
    basketBottomFrame.origin.y = self.view.bounds.size.height;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelay:1.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    self.basketTop.frame = basketTopFrame;
    self.basketBottom.frame = basketBottomFrame;

    [UIView commitAnimations];

}

しかし、動作は私が予想していたものとは異なり、上部のフレームは移動せず、下部のフレームは左上から下にアニメーション化されます(元の位置で、ビューの外に移動しません)。

これはUIImageViews、ストーリーボードに設定した位置です。 ここに画像の説明を入力してください

これはUIImageViews私がアプリを起動したときです:

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

そして、これはUIImageViewsアプリがアニメーションを終了するときです(viewDidLoad): ここに画像の説明を入力してください

このコードはXcode4.2で機能しますが、Xcode 4.5にアップグレードしてストーリーボードを使用してから、この問題が発生し始めます。よろしくお願いします。

4

2 に答える 2

6

ストーリーボードで自動レイアウトが有効になっている可能性があります。この場合、ビューコンポーネントはviewDidLoadで有効なフレーム値を持たないため、コードは機能しません。

ストーリーボードでファイルインスペクターを選択し、[自動レイアウトを使用]のチェックを外すと、自動レイアウトを無効にできます。

いずれにせよ、それはアニメーションを開始するのに間違った方法です。コードをviewDidAppearに移動してみてください。

于 2012-11-15T16:14:13.487 に答える
0

「AutoLayout」をオフにして、IOS 4以降をターゲットにしている場合は、プロセスが簡素化され、1行で実行できるため、ブロックベースのUIViewアニメーションがAppleによって推奨されています。詳細については、 UIViewリファレンスを確認してください。

あなたの場合、ViewDidLoad / ViewWillAppearでアニメーションを実行する予定があるかどうかに関係なく、ブロックベースのアニメーションを使用して次の方法で実行できます。

CGRect basketTopFrame = self.boxTop.frame;
CGRect basketBottomFrame = self.boxBottom.frame;

[UIView animateWithDuration: 0.5 delay:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{
    [self.boxTop setFrame:CGRectMake(basketTopFrame.origin.x, -basketTopFrame.size.height, basketTopFrame.size.width, basketTopFrame.size.height)];

    [self.boxBottom setFrame:CGRectMake(basketBottomFrame.origin.x, self.view.bounds.size.height, basketBottomFrame.size.width, basketBottomFrame.size.height)];

} completion:^(BOOL finished) {
    // TODO : Do any additional stuffs.
}];
于 2012-11-16T04:47:35.280 に答える