ios - Objective C 到 Swift 的转换(协议(protocol))

标签 ios objective-c swift uinavigationcontroller

我正在尝试将下面的代码转换为 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;
}

我不知道那叫什么。知道那是什么吗? 我试着转换它,但它不起作用

Screenshot

最佳答案

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/

相关文章:

swift - 在 mac 上快速获取电池百分比

ios - 将 SVG 图像存储在 iOS 文档目录中

ios - HLS : What is the meaning of a stream without URI?

ios - 将第一个字母设为粗体 - ios swift

ios - 在 View 负载上启用段 Controller View

objective-c - Objective C - 如何连接整个字符串数组?

ios - 如何在coredata而不是钥匙串(keychain)中存储大小为4096的kSecAttrKeyTypeRSA类型的公钥和私钥

ios - 自动调整大小 CCLabelBMFont

ios - WKInterfacePicker 列表中的图片样式

objective-c - 无法获取SMTP代码进行编译