3

ViewController を標準の PushViewConrtoller と同じ速度で左から右にスライドさせようとしています。NavBar を使用しておらず、Modal を使用したくありません。これを行う簡単な方法はありますか?さまざまなスレッドで多くのバリエーションを見てきましたが、どれも正しく動作しません!

プッシュ権に次のコードでナビゲーションコントローラーを使用しています...

- (IBAction)launch1990:(id)sender {

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"1990Storyboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"1990"];
[self.navigationController pushViewController:vc animated:YES];
}
4

3 に答える 3

6

UIStroryBoard をビュー コントローラーまたはセグエにプッシュすると、あまりカスタマイズできません。私が最終的に行ったことは、実行メソッドをオーバーライドし、QuartzCore アニメーションを使用してトランジションをカスタマイズすることでした。UIStoryBoardSegue をサブクラス化し、perform 関数を上書きしました。

以下は、プッシュまたはポップ用にカスタマイズしてから、セグエ用にカスタマイズします。(セグエについては、クラスを IB のカスタム クラスに変更することを忘れないでください)。

通常のポップまたはプッシュから行うには (これはクロス フェード アニメーションを行います。自分用に調整してください):

    #import <QuartzCore/QuartzCore.h>


 - (IBAction)launch1990:(id)sender {
    CATransition* transition = [CATransition animation];
    transition.duration = .45;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"1990Storyboard" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"1990"];
    [self.navigationController pushViewController:vc animated:NO];
  }

セグエから行うには:

//ZHCustomSegue.h
#import <Foundation/Foundation.h>

@interface ZHCustomSegue : UIStoryboardSegue

@end


//  ZHCustomSegue.m
#import "ZHCustomSegue.h"
#import "QuartzCore/QuartzCore.h"

@implementation ZHCustomSegue


-(void)perform {

    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
    UIViewController *destinationController = (UIViewController*)[self destinationViewController];

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



    [sourceViewController.navigationController.view.layer addAnimation:transition
                                                            forKey:kCATransition];

    [sourceViewController.navigationController pushViewController:destinationController animated:NO];

}
@end
于 2013-02-27T16:25:38.037 に答える
5

CATransition一緒に使う subtype: kCATransitionFromLeft

CATransition *transition = [CATransition animation];
    transition.duration = .3;
    transition.type = kCATransitionMoveIn;
     transition.subtype= kCATransitionFromLeft;
    [self.navigationController.view.layer addAnimation:transition forKey:nil];
于 2013-02-27T16:49:26.303 に答える
1

通常のナビゲーション vc プッシュを実行しますが、その前に:

vc.navigationBar.hidden = YES;
于 2013-02-27T16:21:51.787 に答える