Tôi đang cố gắng theo dõi this hướng dẫn về cách tạo chuyển đổi tùy chỉnh. Một khi tôi đã đến một tùy chỉnh cho một phần có liên quan đến UIViewControllerAnimatedTransitioning, tôi bắt đầu có lỗi. . (I "m vẫn còn mới để nhanh chóng, vì vậy nó được thực hiện rất nhiều công sức mà không có gì để hiển thị cho đến nay)gặp sự cố khi sử dụng UIViewControllerAnimatedTransitioning với swift 3
tôi tiếp tục nhận được 2 lỗi 1 -.
Không thể gán giá trị của loại 'CircleTransitionAnimator' để nhập 'CAAnimationDelegate?'
2 -
Phương pháp không ghi đè lên bất kỳ phương pháp từ lớp cha
mình Tôi đoán rằng vấn đề này có liên quan đến UIViewControllerAnimatedTransitioning
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
}
}
Thử thêm 'CAAnimationDelegate' như' lớp CircleTransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning, CAAnimationDelegate'. Xóa 'override' khỏi' override func animationDidStop (anim: CAAnimation !, xong cờ: Bool) ' – beyowulf