3

我正在寫UIStoryboardSegue自定義塞格。我使用CATransition來創建一個從左到右自定義動畫的權利。如果我使用sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);,它不會將我帶到第二個視圖。它僅執行左側動畫的權利並保留在第一個視圖上。我調試了這段代碼,發現sourceViewController.navigationController爲零。在第一個視圖和第二個視圖之間有一個UINavigationController。NavigationController.pushViewController在自定義塞格不工作 - 斯威夫特2.0 - iOS 9.1

我也嘗試用sourceViewController.presentViewController(destinationViewController, animated: false, completion: nil);替換這行代碼。過渡確實發生,但發生得太快,我無法看到左側動畫的權利。

我在這個UIStoryboardSegue完整的代碼如下:

override func perform() { 


    let sourceViewController = self.sourceViewController as UIViewController; 
    let destinationViewController = self.destinationViewController as UIViewController; 
    let transition: CATransition = CATransition() 

    transition.duration = 0.25; 
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
    transition.type = kCATransitionPush; 
    transition.subtype = kCATransitionFromRight; 

    sourceViewController.view.layer.addAnimation(transition, forKey: "kCATransition") 

    sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false); 
} 

非常感謝您的幫助

回答

1

使用sourceViewController.pushViewController是正確的。我之所以沒有加入sourceViewController.navigationController是因爲我將導航控制器放置在第一視圖和第二視圖之間。放置導航控制器的正確方法是將其放置在第一個視圖之前。

This is the correct way of placing the navigation controller:

+0

這個答案可能是正確的,但很難解釋。請填寫答案 – voghDev

0

我也有類似的問題。我的問題是:

sourceViewController.navigationController == nil 

在SourceViewController的故事板文件,單擊視圖控制器,然後:

Editor > Embed in > Navigation controller 

然後Xcode中產生3個ViewControllers:一個初始NavigationController,然後SourceViewController和DestinationViewController。

現在自定義賽格運作。

讓我知道,如果這有助於你:-)