2

UIViewメソッドの右からスライドさせようとしていますが、viewDidLoadこれが私が持っているものです。

CGRect menuFrame = self.menu.frame;
menuFrame.origin.y = menuFrame.size.height+200;

[UIView animateWithDuration:1
                      delay:0.05
                    options: UIViewAnimationCurveEaseIn
                 animations:^{
                     self.menu.frame = menuFrame;
                 }
                 completion:^(BOOL finished){
                     NSLog(@"Animation Complete!");

                 }];

ここで何がうまくいかなかったのかわかりません。助けていただければ幸いです。

4

3 に答える 3

5

これはあなたが尋ねたものではありませんが、とにかく言う価値があります:viewDidLoadこのコードの悪い場所です。viewDidLoadビューコントローラがそのビューを取得したために呼び出されますが、そのビューがインターフェイスに表示された、またはすぐに表示されるためではありません。すぐにインターフェイスに表示される可能性があるため、これまでコードが機能しているように見えましたが、そうでない可能性があります

このコードの正しい場所は、おそらくviewWillAppearまたはviewDidAppearです。ただし、ビューが最初に表示されたときに、このコードを 1 回だけ呼び出したいと思うでしょう。menu以前の呼び出しで既にビューにアニメーション化されているためにコードが呼び出されないようにする場合は、表示されているビュー内に既にフレームがあるviewDidAppearかどうかを確認する条件付きチェックを含めるだけです。menu

ところで、フレームと境界に関係することを避けるもう 1 つの理由はviewDidLoad、アプリがランドスケープで起動し、これがルート ビューでxありy、逆になっている場合です。

于 2012-12-15T16:28:21.643 に答える
2

Y 位置が最初に 200 だけ押し下げられているため、メニューを下からスライドさせようとしているようです。

通常、ビューをサブビューとして画面外の位置に追加することから始め、次にアニメーション ブロックで画面上の位置を設定します。

1.0また、アニメーションの長さとして渡すことを確認してください。

于 2012-12-15T11:30:21.363 に答える
-2

これらの transition.subtype をさまざまな効果に使用します

CATransition* transition = [CATransition animation];  
transition.duration = 0.5;  
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
transition.subtype = kCATransitionFromLeft; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
//transition.subtype = kCATransitionFromTop; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom

[appDelegate.navigation.view.layer addAnimation:transition forKey:nil];
viewController *DairyVC = [[viewController alloc] initWithNibName:@"viewController" bundle:nil];

[appDelegate.navigation pushViewController:DairyVC animated:YES];
于 2012-12-15T11:31:31.727 に答える