美文网首页
swift3.0协议的写法

swift3.0协议的写法

作者: 一米押金 | 来源:发表于2017-03-16 16:14 被阅读0次

这里是针对朋友提出如何写代理的疑问,发现自己的文章丝毫没有提到这个,在这里做出一个补充

如何写协议

/// 设置呈现的转场动画的代理
protocol AnimatorPresentedDelegate : NSObjectProtocol{
    /// 开始位置
    func startRect(indexPath:IndexPath) -> CGRect
    /// 结束位置
    func endRect(indexPath:IndexPath) -> CGRect
    /// 需要呈现的图片控件
    func imageView(indexPath:IndexPath) -> UIImageView
}

定义代理

var presentedDelegate : AnimatorPresentedDelegate?

其中一部分的调用代理方法

func animationForPresentedView(transitionContext: UIViewControllerContextTransitioning){
        //用可选绑定进行代理和indexPath 的nil值校验
        guard  let presentedDelegate = presentedDelegate,let indexPath = indexPath else {
            return;
        }
        //取出弹出的view -- 强制解包
        let presentedView = transitionContext.view(forKey:.to)!;
        //将presentedView添加到containerView中
        transitionContext.containerView.addSubview(presentedView);
        //获取执行动画的imageView,和开始坐标
        let startRect = presentedDelegate.startRect(indexPath: indexPath);
        let imageView = presentedDelegate.imageView(indexPath: indexPath);
        //把imageView加到转场上下文里面
        transitionContext.containerView.addSubview(imageView);
        //设置尺寸--也就是开始的位置的尺寸
        imageView.frame = startRect;
        //执行动画(目的:特殊渐变动画) -- 由透明到不透明
        presentedView.alpha = 0.0;
        //设置containerView为黑色 -- 为了刚开始是看得到微博界面的BUG
        transitionContext.containerView.backgroundColor = UIColor.black;
        UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
            //presentedView.alpha = 1.0;
            //动画过程中走到结束的坐标
            imageView.frame = presentedDelegate.endRect(indexPath: indexPath);
        }) { (_) in
            //针对图片模糊的BUG
            imageView.removeFromSuperview();
            //这个是防止重复的BUG
            presentedView.alpha = 1.0;
            transitionContext.completeTransition(true);
            //执行完之后要还原
            transitionContext.containerView.backgroundColor = UIColor.clear;
        }
    }

相关文章

网友评论

      本文标题:swift3.0协议的写法

      本文链接:https://www.haomeiwen.com/subject/vssjnttx.html