swift3.0協(xié)議的寫法

這里是針對朋友提出如何寫代理的疑問,發(fā)現(xiàn)自己的文章絲毫沒有提到這個,在這里做出一個補充

如何寫協(xié)議

/// 設置呈現(xiàn)的轉(zhuǎn)場動畫的代理
protocol AnimatorPresentedDelegate : NSObjectProtocol{
    /// 開始位置
    func startRect(indexPath:IndexPath) -> CGRect
    /// 結(jié)束位置
    func endRect(indexPath:IndexPath) -> CGRect
    /// 需要呈現(xiàn)的圖片控件
    func imageView(indexPath:IndexPath) -> UIImageView
}

定義代理

var presentedDelegate : AnimatorPresentedDelegate?

其中一部分的調(diào)用代理方法

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);
        //獲取執(zhí)行動畫的imageView,和開始坐標
        let startRect = presentedDelegate.startRect(indexPath: indexPath);
        let imageView = presentedDelegate.imageView(indexPath: indexPath);
        //把imageView加到轉(zhuǎn)場上下文里面
        transitionContext.containerView.addSubview(imageView);
        //設置尺寸--也就是開始的位置的尺寸
        imageView.frame = startRect;
        //執(zhí)行動畫(目的:特殊漸變動畫) -- 由透明到不透明
        presentedView.alpha = 0.0;
        //設置containerView為黑色 -- 為了剛開始是看得到微博界面的BUG
        transitionContext.containerView.backgroundColor = UIColor.black;
        UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
            //presentedView.alpha = 1.0;
            //動畫過程中走到結(jié)束的坐標
            imageView.frame = presentedDelegate.endRect(indexPath: indexPath);
        }) { (_) in
            //針對圖片模糊的BUG
            imageView.removeFromSuperview();
            //這個是防止重復的BUG
            presentedView.alpha = 1.0;
            transitionContext.completeTransition(true);
            //執(zhí)行完之后要還原
            transitionContext.containerView.backgroundColor = UIColor.clear;
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,373評論 25 708
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,367評論 11 349
  • 《女思男愁》 男兒志千古愁 溢于胸懷中 拋入一汪江水向東流 笑非笑 憂且憂 濁世誰人能懂 拂袖獨行不回首 女兒心似...
    Leo_Touch閱讀 504評論 0 2
  • 今天畫的有點粗糙!!!! 請你們見諒,而且我快自考的,可能會停更幾天!!!!我以后還是會堅持的! 還有,今天福利繼...
    努力的夏小花閱讀 337評論 2 5
  • 我說了句希望自己有一天能告別網(wǎng)賺。 很多人不理解,有人就想不通了,覺得網(wǎng)賺竟然賺錢為什么想告別?而有人說可能是根本...
    可可嘻嘻了閱讀 732評論 0 0