0

セグエでリンクされたストーリーボードに 2 つのビュー コントローラーがあります。最初の View Controller は、UIImage を画面の中央から上部にスライドさせてから UIButton を表示するアニメーションを実行します。すべてうまく機能します。ただし、ボタンがタッチされると、セグエが実行され、モーダルに 2 番目のビュー コントローラーが表示されます。しかし、2 番目のビュー コントローラーが画面を上にスライドすると、UIImage がアニメーション化される前と同じように画面の中央に戻ることがわかります。

これです:

- (void)viewDidLoad{
    [super viewDidLoad];
    self.willAnimate=YES;
}

- (void)viewDidAppear:(BOOL)animated{
    if (self.willAnimate) [self animate];
}
- (void) animate{
    if (self.willAnimate){
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1.8];
            //hide button first
            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationDuration:0.1];
            self.myButton.alpha=0;
            [UIView commitAnimations];

        //move background
        CGRect imgRect = self.myImageView.frame;
        imgRect.origin.y-=200;
        self.myImageView.frame=backgroundRect;

        //restore button
            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationDuration:0.5];
            [UIView setAnimationDelay:1.8];
            self.myButton.alpha=1;
            [UIView commitAnimations];
        [UIView commitAnimations];
        self.willAnimate=NO;
    }
}

- (IBAction)myButtonPressed {
    [self performSegueWithIdentifier:@"mySegue" sender:self ];
}

これは、セグエがストーリーボードから最初のビュー コントローラーを読み込んでいるためですか? アニメーション後の画像をそのままにして、View Controller 間を行き来するにはどうすればよいですか?

4

1 に答える 1

4

これはおそらく自動レイアウトによるものです。自動レイアウトをオンにしてフレームを変更すると、システムがビューを再レイアウトする必要があるその他のアクションによって、フレームが制約によって定義されたフレームに戻ります。そのため、自動レイアウトをオフにするか、レイアウトの制約を変更して原点を変更する必要があります。自動レイアウトを使用する場合、フレームの設定は一切行わず、制約を変更するだけにしてください。

于 2013-08-02T04:59:01.810 に答える