2

同じViewControllerに2つのビューを持つ遷移クラスがあります。これは問題なく動作します。同じトランジションを2番目のViewControllerに適用したいと思います。例外は発生していませんが、機能していません...

現在の遷移コードは次のようになります。

カスタム遷移クラス

- (id)initWithBaseView:(UIView *)baseView firstView:(UIView *)firstView lastView:(UIView *)lastView
{
    if((self = [super init])) {
        self.view = baseView;
        self.originalView = firstView;
        self.nextView = lastView;
    }
    return self;
}

これは機能しているコードです:

シングルビューコントローラクラス

- (IBAction)doTransition:(id)sender
{
    MyTransition *transition = [[MyTransition alloc] initWithBaseView:self.view 
                                                                          firstView:self.currentView 
                                                                           lastView:self.nextView];
    [transition buildAnimation];
}

私はこのようなことを達成したいと思います:

- (IBAction)doTransition:(id)sender
{
    NSLog(@"%s", __FUNCTION__);
    MyTransition *transition = [[MyTransition alloc] initWithBaseView:self.view
                                                                          firstView:self.currentView 
                                                                           lastView:secondView.lastView];
    [transition buildAnimation];
}
- (void)viewDidLoad
{
    NSLog(@"%s", __FUNCTION__);
    [super viewDidLoad];
    secondView = [[SecondViewController *) secondView initWithNibName:@"SecondViewController" bundle:nil];
}

ここで、FirstViewはfirstViewControllerにあり、nextViewは2番目のViewControllerにあります。

アップデート:

最初のVCを次のように更新しました。

   - (void)viewDidLoad
    {
        NSLog(@"%s", __FUNCTION__);
        [super viewDidLoad];
        secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    }

- (IBAction)doTransition:(id)sender
{
    NSLog(@"%s", __FUNCTION__);
    MyTransition *transition = [[MyTransition alloc] initWithBaseView:self.view                                             firstView:self.currentView                                                   lastView:secondView.view];

    [transition buildAnimation];
}

2番目のVCをログに記録すると、呼び出されていないことがわかります。

4

2 に答える 2

2

次のようなことを試してみればうまくいくと思います。

- (IBAction)doTransition:(id)sender
{
    NSLog(@"%s", __FUNCTION__);
    MyTransition *transition = [[MyTransition alloc] initWithBaseView:self.view
                                                                          firstView:self.currentView 
                                                                           lastView:secondView.view];
    [transition buildAnimation];
}
- (void)viewDidLoad
{
    NSLog(@"%s", __FUNCTION__);
    [super viewDidLoad];
    secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
}

あなたがやろうとしていることを理解していれば、通常のビューの場合と同じように、SecondViewControllerのビューで同じアニメーションを実行できるはずです。それとも私は何か他のものが欠けていますか?

于 2013-02-08T01:11:56.907 に答える
0

問題は、secondViewを独自のViewControllerで正しく初期化していないことであることが判明しました。それを行うと、移行は必要に応じて機能しました。

他の人のために、私が使用したコードは次のとおりでした:

FirstViewController:

- (void)viewDidLoad
{
    NSLog(@"%s", __FUNCTION__);
    [super viewDidLoad];

    secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

}

- (IBAction)clickOpenDoor:(id)sender
{

MyTransition *transition = [[MyTransition alloc] initWithBaseView:self.view
firstView:self.currentView                                               lastView:secondView.view];

    [transition buildAnimation];
}

セカンドビューコントローラー:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
NSLog(@"%s", __FUNCTION__);
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 350, 500)];
        tableView  = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 350, 500)];
        [view addSubview:tableView];
    }
于 2013-02-08T12:23:14.047 に答える