我正在尝试将下面的代码转换为 swift
- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController *)fromVC
toViewController:(UIViewController *)toVC
{
// minimum implementation for example
RMPZoomTransitionAnimator *animator = [[RMPZoomTransitionAnimator alloc] init];
animator.goingForward = (operation == UINavigationControllerOperationPush);
animator.sourceTransition = (id<RMPZoomTransitionAnimating>)fromVC;
animator.destinationTransition = (id<RMPZoomTransitionAnimating>)toVC;
return animator;
}
到目前为止我已经成功转换了,但我想知道我应该如何转换这个 (id<RMPZoomTransitionAnimating>)fromVC
func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
let animator: RMPZoomTransitionAnimator = RMPZoomTransitionAnimator();
animator.goingForward = (operation == UINavigationControllerOperation.Push);
animator.sourceTransition = fromVC as! RMPZoomTransitionAnimating;//DOESN'T COMPILE
animator.destinationTransition = toVC as! RMPZoomTransitionAnimating;//DOESN'T COMPILE
return animator;
}
我不知道那叫什么。知道那是什么吗? 我试着转换它,但它不起作用
最佳答案
RMPZoomTransitionAnimator swift3.0 扩展
extension ViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
if fromVC is RMPZoomTransitionAnimating && toVC is RMPZoomTransitionAnimating {
let animator = RMPZoomTransitionAnimator()
animator.goingForward = (operation == .push)
animator.sourceTransition = fromVC as? RMPZoomTransitionAnimating & RMPZoomTransitionDelegate
animator.destinationTransition = toVC as? RMPZoomTransitionAnimating & RMPZoomTransitionDelegate
return animator
} else {
return nil
}
}
}
extension ViewController: RMPZoomTransitionAnimating, RMPZoomTransitionDelegate {
func imageViewFrame() -> CGRect {
if let collectionView = self.collectionView(),
let indexPath = self.selectedIndexPath,
let cell = collectionView.cellForItemAtIndexPath(indexPath) as? NewsCollectionViewCell,
let imageView = cell.fgImageView {
let frame = imageView.convertRect(imageView.frame, toView: self.view.window)
return frame
}
return CGRect.zero
}
func transitionSourceImageView() -> UIImageView! {
let imageView = UIImageView()
imageView.clipsToBounds = true
imageView.isUserInteractionEnabled = false
imageView.contentMode = .scaleAspectFill
imageView.frame = imageViewFrame()
imageView.image = self.selectedViewCell?.fgImageView!.image
return imageView
}
func transitionSourceBackgroundColor() -> UIColor! {
return UIColor.white
}
func transitionDestinationImageViewFrame() -> CGRect {
return imageViewFrame()
}
func zoomTransitionAnimator(_ animator: RMPZoomTransitionAnimator!, didCompleteTransition didComplete: Bool, animatingSourceImageView imageView: UIImageView!) {
}
}
关于ios - Objective C 到 Swift 的转换(协议(protocol)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295668/