亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > 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)     }   } } 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
深夜精品寂寞黄网站在线观看| 一级做a爰片久久毛片美女图片| 欧美激情亚洲激情| 欧美日韩午夜剧场| 91精品成人久久| 欧美大片免费观看在线观看网站推荐| 亚洲高清色综合| 欧美激情在线视频二区| 日韩精品极品视频免费观看| 久久久精品久久久| 亚洲第一页中文字幕| 午夜精品在线视频| 久久男人av资源网站| 日韩在线观看你懂的| 亚洲精品永久免费| 91精品国产高清久久久久久| 国产精品香蕉av| 国产一区av在线| 欧美日韩一区二区在线| 国产视频久久久| xxx成人少妇69| 成人免费视频xnxx.com| 久久99国产精品自在自在app| 欧美日韩国产色视频| 国产一区二区三区18| 北条麻妃99精品青青久久| 国产精品白嫩初高中害羞小美女| 91精品国产91久久久久| 色婷婷av一区二区三区在线观看| 久久久亚洲成人| 97久久精品国产| 欧美激情在线有限公司| 国产精品久久久久久久久借妻| 欧美激情图片区| 91亚洲一区精品| 国内久久久精品| 欧美成人免费全部| 久久久久亚洲精品国产| 欧美精品videofree1080p| 亚洲精品一区二区网址| 国产精品日韩精品| 久久久999国产精品| 97av视频在线| 国产精品亚洲美女av网站| 亚洲成人aaa| 美女视频黄免费的亚洲男人天堂| 国产91免费观看| 97av在线视频免费播放| 欧洲美女免费图片一区| 欧美一级在线亚洲天堂| 亚洲自拍偷拍一区| 在线电影欧美日韩一区二区私密| 欧美精品在线极品| 91在线观看免费| 国产美女久久精品香蕉69| 伊人亚洲福利一区二区三区| 日韩精品视频在线观看免费| www国产精品视频| 久久久噜噜噜久噜久久| 久久精品久久久久电影| 成人h猎奇视频网站| 这里只有精品视频在线| 精品亚洲男同gayvideo网站| 亚洲最大av网| 97av在线视频免费播放| 亚洲黄色av网站| 国产精品久久久久一区二区| 中文字幕日韩精品在线观看| 久久成年人视频| 欧美区二区三区| 91欧美精品成人综合在线观看| 亚洲www永久成人夜色| 亚洲欧美一区二区激情| 亚洲自拍偷拍区| 国产成人精品久久二区二区91| 国产一区二区三区视频免费| 亚洲男人7777| 成人午夜在线视频一区| 欧美一乱一性一交一视频| 国内揄拍国内精品少妇国语| 91理论片午午论夜理片久久| 国产99久久精品一区二区永久免费| 日韩免费电影在线观看| 国产免费一区二区三区在线能观看| 久久精品成人一区二区三区| 亚洲欧美视频在线| 欧美激情亚洲国产| 日韩视频免费观看| 欧美国产高跟鞋裸体秀xxxhd| 欧美视频在线视频| 日韩成人在线视频观看| 一本色道久久综合狠狠躁篇怎么玩| 久久99国产精品久久久久久久久| 午夜精品一区二区三区av| 一区二区三区天堂av| 久久99久久亚洲国产| 国产精品视频导航| 国产高清视频一区三区| 在线视频国产日韩| 国产精品自拍视频| 性色av一区二区三区免费| 亚洲欧洲日韩国产| 国产亚洲欧美一区| 国产国语刺激对白av不卡| 日韩资源在线观看| 成人精品久久一区二区三区| 国自在线精品视频| 一区二区欧美亚洲| 亚洲精品久久久久| 神马久久桃色视频| 久久精品一偷一偷国产| 欧美激情奇米色| 国产亚洲人成网站在线观看| 欧美日韩视频在线| 久久精品国产一区二区三区| 国产欧美一区二区三区四区| 久久香蕉频线观| 欧美三级欧美成人高清www| 欧美老少做受xxxx高潮| 亚洲电影免费观看高清| 国产精品视频大全| 川上优av一区二区线观看| 国产suv精品一区二区| 91精品国产色综合久久不卡98口| 亚洲国产精品va在看黑人| 色播久久人人爽人人爽人人片视av| 欧美激情免费视频| 成人美女av在线直播| 91在线无精精品一区二区| 欧美视频免费在线| 亚洲一区二区三区在线免费观看| 中文字幕不卡在线视频极品| 国产精品日韩欧美大师| 国产精品尤物福利片在线观看| 热re91久久精品国99热蜜臀| 亚洲人成电影在线播放| 久久久国产一区二区| 在线看日韩av| 国产精品中文久久久久久久| 亚洲精品一二区| 欧美成人精品xxx| 日韩中文字幕在线视频播放| 这里只有精品视频在线| 久久久久久久久久久av| 国产成人一区二区三区电影| 国产精品视频yy9099| 九九热这里只有精品免费看| 欧美大奶子在线| 91国内产香蕉| 国产区亚洲区欧美区| 国产一区二区色| 久久精品国产69国产精品亚洲| 色久欧美在线视频观看| 亚洲国产精品一区二区三区| 国产一区二区黄| 日韩精品中文字幕久久臀| 亚洲色图欧美制服丝袜另类第一页| 久久久国产精品免费| 91欧美精品成人综合在线观看| 午夜免费久久久久| 高清欧美性猛交| 欧美精品在线网站| 亚洲激情视频在线| 中文字幕亚洲欧美日韩高清|