Ich versuche this Tutorial zum Erstellen eines benutzerdefinierten Übergangs zu folgen. Sobald ich zu einem benutzerdefinierten Teil von UIViewControllerAnimatedTransitioning kam, begann ich Fehler zu haben. . (I "m noch neu zu schnell, so dass er sich sehr viel Mühe mit bisher nichts zeigen genommen wird)Probleme bei der Verwendung von UIViewControllerAnimatedTransitioning mit swift 3
Ich erhalte 2 Fehler. 1 -
Wert kann nicht vom Typ zuweisen‚CircleTransitionAnimator‘ um 'CAAnimationDelegate?'
2 -
Methode außer Kraft setzen keine Methode aus seiner übergeordneten Klasse
Ich vermute, dass das Problem auf UIViewControllerAnimatedTransitioning zusammenhängt
class CircleTransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.5
}
weak var transitionContext: UIViewControllerContextTransitioning?
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
self.transitionContext = transitionContext
var containerView = transitionContext.containerView()
var fromViewController = transitionContext.viewController(forKey: UITransitionContextFromViewControllerKey) as! ViewController
var toViewController = transitionContext.viewController(forKey: UITransitionContextToViewControllerKey) as! ViewController
var button = fromViewController.button
containerView.addSubview(toViewController.view)
var circleMaskPathInitial = UIBezierPath(ovalIn: (button?.frame)!)
var extremePoint = CGPoint(x: (button?.center.x)! - 0, y: (button?.center.y)! - toViewController.view.bounds.height)
var radius = sqrt((extremePoint.x*extremePoint.x) + (extremePoint.y*extremePoint.y))
var circleMaskPathFinal = UIBezierPath(ovalIn: (button?.frame)!.insetBy(dx: -radius, dy: -radius))
var maskLayer = CAShapeLayer()
maskLayer.path = circleMaskPathFinal.cgPath
toViewController.view.layer.mask = maskLayer
var maskLayerAnimation = CABasicAnimation(keyPath: "path")
maskLayerAnimation.fromValue = circleMaskPathInitial.cgPath
maskLayerAnimation.toValue = circleMaskPathFinal.cgPath
maskLayerAnimation.duration = self.transitionDuration(using: transitionContext)
maskLayerAnimation.delegate = self
maskLayer.add(maskLayerAnimation, forKey: "path")
}
override func animationDidStop(anim: CAAnimation!, finished flag: Bool) {
self.transitionContext?.completeTransition(!self.transitionContext!.transitionWasCancelled())
self.transitionContext?.viewController(forKey: UITransitionContextFromViewControllerKey)?.view.layer.mask = nil
}
}
Versuchen Sie, 'CAAnimationDelegate' wie' Klasse CircleTransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning, CAAnimationDelegate' hinzuzufügen. Entfernen Sie 'override' von' override func animationDidStop (anim: CAAnimation !, Fertigmarkierung: Bool) ' – beyowulf