2016-09-30 13 views
2

私は右から左にアニメーションを持つviewcontrollerをもたらすカスタムセグを実装しようとしています。問題は、必要なコントローラにセグを実行するためにボタンを押したときにアプリがクラッシュすることです。次のエラーが表示されます。左から右へのアニメーションのついたもの

Could not create a segue of class '(null)'

私はどのように実装しましたか? 私は新しいクラスを作成し、次のコードを実行する関数をオーバーライド:私はカスタムセグエ(私のCustomTransitionクラスによって生成されたものを使用して結ばUIButtoonを持っている私のストーリーボードで

import UIKit 

class CustomTransition: UIStoryboardSegue { 

override func perform() 
{ 
    let src = self.source 
    let dst = self.destination 

    src.view.superview?.insertSubview(dst.view, aboveSubview: src.view) 
    dst.view.transform = CGAffineTransform(translationX: -src.view.frame.size.width, y: 0) 

    UIView.animate(withDuration: 0.25, 
           delay: 0.0, 
           options: UIViewAnimationOptions.curveEaseInOut, 
           animations: { 
           dst.view.transform = CGAffineTransform(translationX: 0, y: 0) 
     }, 
           completion: { finished in 
           src.present(dst, animated: false, completion: nil) 
     } 
    ) 
} 

}

)。アプリを実行してボタンをタップすると、私のアプリは上記のエラーでクラッシュします。なぜクラッシュするのか分かりません。私が見つけたウェブ上のすべての記事は、私がそれを実装した方法に似ています。

答えて

1

セグを使用しないようにしましたが、この目的のためにトランジションを使用しましたか?

// create transition 
let transition = CATransition() 
transition.duration = 0.3 
// check other types 
transition.type = kCATransitionMoveIn 
// move from left 
transition.subtype = kCATransitionFromLeft 
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
navigationController.view.layer.addAnimation(transition, forKey: kCATransition) 
// push controller 
navigationController.pushViewController(controller, animated: false) 
+0

navigationController何ですか?あなたのsourceVCはUINavigationControllerでなければなりませんか?ソースと宛先が元の質問のような2つの通常のUIViewControllerの場合はどうなりますか? – Cindeselia

+0

@Cindeseliaあなたは 'sourceVC.navigationController'プロパティからナビゲーションコントローラにアクセスできます。 – Astoria

0

あなたはセグエクラスにそのコードを抽出し、ストーリーボード上で使用することができます。

LeftToRightSegue.h:

@interface LeftToRightSegue : UIStoryboardSegue 

@end 

LeftToRightSegue.m

@implementation LeftToRightSegue 
-(void)perform 
{ 
    CATransition * transition = [CATransition new]; 
    transition.duration = 1; 
    transition.type = kCATransitionMoveIn; 
    transition.subtype = kCATransitionFromLeft; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    [self.sourceViewController.navigationController.view.layer addAnimation:transition forKey:kCATransition]; 
    [self.sourceViewController.navigationController pushViewController:self.destinationViewController animated:false]; 
} 
@end 
関連する問題