圖片展示、隱藏轉(zhuǎn)場動畫

通過UIViewControllerAnimatedTransitioning實現(xiàn)圖片的轉(zhuǎn)場動畫,效果類似手機自帶的照片查看器。詳細過程如下:
先看看效果:


QQ20180507-223238-HD.gif

首先造一個ShowImageController控制器

class ShowImageController: UIViewController {

}

那么它能做什么,首先要能展示圖片,給它一個UIImageView

class ShowImageController: UIViewController {
/// 圖像視圖
    private lazy var imageView: UIImageView = {
        let iv = UIImageView()
        
        return iv
    }()
}
    

其次,它還要支持縮放,給它一個UIScrollView

class ShowImageController: UIViewController {
    /// 圖像視圖
    private lazy var imageView: UIImageView = {
        let iv = UIImageView()
        
        return iv
    }()
    /// 滾動視圖
    private lazy var scrollView: UIScrollView = {
        let s = UIScrollView(frame: self.view.bounds)
        s.backgroundColor = UIColor.black
        // 支持縮放
        // 1. 設(shè)置代理
        s.delegate = self
        // 2. 最小大縮放比例
        s.minimumZoomScale = 1
        s.maximumZoomScale = 2.0
        
        return s
    }()
}

添加一個構(gòu)造方法

  • 捕捉一個屏幕快照dummyView
  • 設(shè)置transitioningDelegate
init(sourceView:UIImageView) {
    super.init(nibName: nil, bundle: nil)
    
    self.setImage(image: sourceView.image)
    let window = UIApplication.shared.keyWindow
    self.showPicDelegate.dummyView = sourceView.snapshotView(afterScreenUpdates: false)
    self.showPicDelegate.sourceRect = sourceView.convert(sourceView.bounds, to: window)
    self.showPicDelegate.destRect = imageSize(sourceView.image!)
    self.transitioningDelegate = self.showPicDelegate
    modalPresentationStyle = UIModalPresentationStyle.custom
}

然后實現(xiàn)transitioningDelegate,新建ShowPicAnimator類,添加屬性

class ShowPicAnimator: NSObject, UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning {
    ///是開始還是結(jié)束
    var isPresent: Bool = true
    ///快照
    var dummyView: UIView?
    ///起始位置
    var sourceRect: CGRect = CGRect.zero
    ///結(jié)束位置
    var destRect: CGRect = CGRect.zero
}

添加代理方法

// 指定誰負責轉(zhuǎn)場動畫
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    isPresent = true
    return self
}
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    isPresent = false
    return self
}
//UIViewControllerAnimatedTransitioning
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
    return 0.3
}
/* self實現(xiàn)動畫
1. 計算動畫的起始位置
2. 計算動畫的目標位置
*/
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
}

具體實現(xiàn)細節(jié)見代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務(wù) 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,205評論 1 180
  • 概述 這篇文章,我將講述幾種轉(zhuǎn)場動畫的自定義方式,并且每種方式附上一個示例,畢竟代碼才是我們的語言,這樣比較容易上...
    伯恩的遺產(chǎn)閱讀 54,503評論 37 381
  • 潮濕的陰雨天總是會讓人的心情有些down,也許這真適合今天的課程,激活高效員工。要想馬兒跑,要讓馬兒先吃草,蠻形象...
    劉揚_ca83閱讀 254評論 0 0
  • 陪兒子跑步的時候,也經(jīng)常遇到其他父子倆在那里走圈,老子談?wù)摰脑掝}也總離不開當年多么能跑,什么跑完3000米,休息一...
    512song閱讀 94評論 0 0
  • 今天上午熬了一鍋雞湯來喝,最近這段時間吃得太不健康了,就想著煮點東西補一補。這應(yīng)該是我半年以來喝的第一碗雞湯了吧,...
    鈐魚擺擺閱讀 148評論 1 1

友情鏈接更多精彩內(nèi)容