簡體   English   中英

從左到右帶有動畫的 Segue

[英]Segue with animation from left to right

我正在嘗試實現一個自定義的 segue,它將從右到左為視圖控制器帶來動畫。 問題是當我按下按鈕以對所需控制器執行 segue 時,我的應用程序崩潰。 我收到以下錯誤:

無法創建類 '(null)' 的 segue

我是如何實施的? 我創建了一個新類並使用以下代碼覆蓋執行函數:

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)
        }
    )
}

}

在我的故事板中,我有一個 UIButton,我使用自定義轉場(由我的 CustomTransition 類生成的轉場)綁定了它。 當我運行應用程序並點擊按鈕時,我的應用程序崩潰並顯示上面發布的錯誤。 我不明白為什么它會崩潰。 我在網上找到的每篇文章都與我實現它的方式相似。

為此,您是否嘗試不使用轉場而是使用過渡?

// 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)

您可以將該代碼提取到 Segue 類並在 Storyboard 上使用:

LeftToRightSegue.h:

@interface LeftToRightSegue : UIStoryboardSegue

@end

從左到右Segue.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM