国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

swift3.0實現圖片放大縮小動畫效果

2020-07-26 02:41:11
字體:
來源:轉載
供稿:網友

一. 內容說明

      跟我之前這篇類似,只不過那篇是OC版本,這篇是Swift版本 OC版本鏈接地址

目的:通過kingfisher請求5張圖片,展示出來。然后利用圖片放大縮小管理類展示圖片,多張圖片可以滑動瀏覽

效果圖如下,想看動態的效果圖,請看上面鏈接中的OC版本效果圖,跟這篇是一樣的。

本demo,只加載本地圖片的demo下載鏈接 ,需要加載網絡圖片的,需要下載Kingfisher

二.源碼展示

0. 圖片測試demo源碼

import Foundation import UIKit  class LJPhotoGroupViewController : TFBaseViewController{    lazy var ljArray : [LJPhotoInfo] = [LJPhotoInfo]()   let ljUrlArray = ["http://pica.nipic.com/2007-12-12/20071212235955316_2.jpg",            "http://d.lanrentuku.com/down/png/1706/10avatars-material-pngs/avatars-material-man-4.png",            "http://image.nationalgeographic.com.cn/2017/0703/20170703042329843.jpg",            "http://image.nationalgeographic.com.cn/2015/0121/20150121033625957.jpg",            "http://image.nationalgeographic.com.cn/2017/0702/20170702124619643.jpg"]      override func viewDidLoad() {     super.viewDidLoad()          self.setTopNavBarTitle("圖片瀏覽測試Demo")     self.setTopNavBackButton()     self.setUI()   } }  extension LJPhotoGroupViewController{   func setUI(){          for index in 0...4{              //1.加載本地圖片       //let image = UIImage.init(named: "/(index + 1).jpg")       let showImageView = UIImageView.init()       //showImageView.image = image       showImageView.tag = index       showImageView.frame = CGRect(x: Int((AppWidth - 200)/2.0), y: 80 + Int(90 * index), width: 200, height: 80)       showImageView.isUserInteractionEnabled = true       view.addSubview(showImageView)              //2.加載本地圖片       let url = URL(string:ljUrlArray[index])       showImageView.kf.setImage(with: url)              let gestrue = UITapGestureRecognizer.init(target: self, action: #selector(LJPhotoGroupViewController.showClicked(_:)))       showImageView.addGestureRecognizer(gestrue)              //需要瀏覽的圖片添加到數組       let info = LJPhotoInfo.init()       info.largeImageURLStr = ljUrlArray[index]       info.thumbImageview = showImageView       info.currentSelectIndex = index       self.ljArray.append(info)     }   } }  extension LJPhotoGroupViewController{      func showClicked(_ sender : UITapGestureRecognizer){     if self.ljArray.count > 0 {       let index = sender.view?.tag       let photoGroupView = LJPhotoGroupView.init(frame: CGRect(x: 0, y: 0, width: AppWidth, height: AppHeight))       photoGroupView.setData(self.ljArray, selectedIndex: index!)       photoGroupView.showPhotoView()              CHDebugLog("-------/(String(describing: index))")     }   } } 

1. LJPhotoGroupView:圖片瀏覽管理類,用于展示圖片

import Foundation import UIKit  class LJPhotoGroupView: UIView {      let baseIndex = 1000      var originFrame : CGRect? // 圖片的源尺寸   var currentIndex : NSInteger = 0 //當前選中的圖片index   var ljPhotoArray : [Any] = [Any]()//存儲多組需要加載的圖片原始信息      lazy var ljScrollView : UIScrollView = {     let view = UIScrollView.init(frame: CGRect(x: 0, y: 0, width: AppWidth, height: AppHeight))     view.delegate = self     view.isPagingEnabled = true     view.backgroundColor = UIColor.yellow     return view   }()      override init(frame: CGRect) {     super.init(frame: frame)     self.addSubview(self.ljScrollView)   }    func setData(_ photoArray : Array<Any>, selectedIndex : NSInteger) {     self.ljScrollView.contentSize = CGSize(width: floor(AppWidth) * CGFloat(photoArray.count), height: AppHeight)     self.currentIndex = selectedIndex     self.ljPhotoArray = photoArray   }      required init?(coder aDecoder: NSCoder) {     fatalError("init(coder:) has not been implemented")   } }  extension LJPhotoGroupView {  // MARK: -- 圖片cell復用   func dequeueReusableCell() -> LJPhotoView {          var cell = self.viewWithTag(baseIndex + self.currentIndex) as? LJPhotoView          if ljPhotoArray.count > currentIndex {       let info = ljPhotoArray[currentIndex] as? LJPhotoInfo       let tempImageView = info?.thumbImageview        if cell != nil{         self.originFrame = tempImageView?.convert((tempImageView?.bounds)!, to: self)         return cell!       }              cell = LJPhotoView.init(frame: CGRect(x: floor(AppWidth)*CGFloat(currentIndex), y: 0, width: AppWidth, height: AppHeight))       self.originFrame = tempImageView?.convert((tempImageView?.bounds)!, to: self)     }     return cell!   }   // MARK: -- 展示圖片   func showPhotoView(){          UIApplication.shared.keyWindow?.rootViewController?.view.addSubview(self)     self.backgroundColor = UIColor.black        let cell1 = self.dequeueReusableCell()     cell1.tag = self.baseIndex + self.currentIndex          var ljTempImage : UIImage?     if ljPhotoArray.count > currentIndex {       let info = ljPhotoArray[currentIndex] as? LJPhotoInfo       ljTempImage = info?.thumbImageview?.image     }          ljTempImage = (ljTempImage != nil) ? ljTempImage : UIImage.init(named: "pic_broadcast_gray_square")          let tfImageView = UIImageView.init(image: ljTempImage)     tfImageView.frame = self.originFrame ?? CGRect.zero     tfImageView.clipsToBounds = true     tfImageView.backgroundColor = UIColor.red     tfImageView.contentMode = .scaleAspectFit     self.addSubview(tfImageView)          //添加頁面消失的手勢     let tap = UITapGestureRecognizer.init(target: self, action: #selector(hideImageView))     self.addGestureRecognizer(tap)          UIView.animate(withDuration: 0.25, animations: {       let y : CGFloat? = (AppHeight - (ljTempImage?.size.height)! * AppWidth / (ljTempImage?.size.width)!)/2.0       let height : CGFloat? = (ljTempImage?.size.height)! * AppWidth / (ljTempImage?.size.width)!       tfImageView.frame = CGRect(x: 0, y: y!, width: AppWidth, height: height!)     }) { (finish) in       //根據選中第幾張圖片直接展示出來       let cell = self.dequeueReusableCell()       cell.tag = self.baseIndex + self.currentIndex       cell.backgroundColor = UIColor.gray              if self.ljPhotoArray.count > self.currentIndex{         cell.setCurrentImageview(self.ljPhotoArray[self.currentIndex] as! LJPhotoInfo)       }       let x : CGFloat = CGFloat(self.currentIndex) * floor(AppWidth);       self.ljScrollView.setContentOffset(CGPoint.init(x: x, y: 0), animated: false)       self.ljScrollView.addSubview(cell)                     tfImageView.removeFromSuperview()     }   }    // MARK: -- 移除圖片   func hideImageView(){     let cell = self.viewWithTag(baseIndex + currentIndex) as? LJPhotoView     UIView.animate(withDuration: 0.25, animations: {       cell?.ljImageView.frame = self.originFrame!     }) { (finish) in       self.backgroundColor = UIColor.white       self.removeFromSuperview()     }   } }  extension LJPhotoGroupView : UIScrollViewDelegate{      func scrollViewDidScroll(_ scrollView: UIScrollView) {     //滑動時,會調用多次   }      func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {    //滑動完畢時,只會調用一次     let page = self.ljScrollView.contentOffset.x / self.frame.size.width;     self.currentIndex = NSInteger(page);     print("scrollViewDidEndDecelerating當前頁數----/(page)")          let cell = self.dequeueReusableCell()     cell.tag = self.baseIndex + Int(page)     if self.ljPhotoArray.count > self.currentIndex{       cell.setCurrentImageview(self.ljPhotoArray[self.currentIndex] as! LJPhotoInfo)     }     self.ljScrollView.addSubview(cell)   } } 

2. LJPhotoInfo:圖片信息的model

import Foundation import UIKit  class LJPhotoInfo: NSObject {      var currentSelectIndex : Int?   var largeImageURLStr : String?   var thumbImageview : UIImageView?      override init() {     super.init()   } } 

3.LJPhotoView:圖片瀏覽管理類用到的cell(圖片顯示)

import Foundation import UIKit  class LJPhotoView: UIScrollView {      var ljInfo : LJPhotoInfo?      lazy var ljImageView : UIImageView = {       let view = UIImageView()       view.clipsToBounds = true       view.contentMode = .scaleAspectFit       return view     }()      override init(frame: CGRect) {     super.init(frame: frame)     self.zoomScale = 1.0     self.addSubview(self.ljImageView)   }      required init?(coder aDecoder: NSCoder) {     fatalError("init(coder:) has not been implemented")   } }  extension LJPhotoView{   func setCurrentImageview(_ info : LJPhotoInfo){     self.ljInfo = info     if self.ljInfo?.thumbImageview?.image == nil{       self.ljInfo?.thumbImageview?.image = UIImage.init(named: "pic_broadcast_gray_square")     }          //無url,則通過thumbImageview獲取Image展示     //self.ljImageview.image = info.thumbImageview.image;     let y : CGFloat? = (AppHeight - (info.thumbImageview?.image?.size.height)! * AppWidth / (info.thumbImageview?.image?.size.width)!) * 0.5;     self.ljImageView.frame = CGRect(x: 0, y: y!, width: AppWidth, height: AppWidth*(info.thumbImageview?.image?.size.height)!/(info.thumbImageview?.image?.size.width)!)     self.ljImageView.image = self.ljInfo?.thumbImageview?.image          if info.largeImageURLStr != "" {       let url = URL(string:info.largeImageURLStr!)       self.ljImageView.kf.setImage(with: url)     }   } } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 章丘市| 南漳县| 德保县| 韩城市| 扶沟县| 汉寿县| 河东区| 石河子市| 通道| 开原市| 吕梁市| 长丰县| 芦山县| 如皋市| 孟州市| 永寿县| 班戈县| 客服| 碌曲县| 油尖旺区| 连江县| 乐陵市| 新河县| 正安县| 永泰县| 罗田县| 宜黄县| 杭锦后旗| 平昌县| 遵化市| 普兰店市| 无棣县| 镇康县| 灵台县| 盈江县| 天峨县| 衢州市| 威远县| 锡林浩特市| 融水| 临猗县|