
场景:我们在使用app的时候,特别是显示多张图片的时候,都会点击图片并进行浏览,比如QQ、微信,好友发表的动态,我们都会点击进去查看原图。现在很多app都支持图片浏览功能,这样更加方便用户体验,那么我们在项目开发过程中,怎么对图片点击进行预览,下面介绍一下在swift项目开发中使用SDPhotobrowser进行图片浏览。
SDPhotobrowser地址:https://github.com/gsdios/SDPhotoBrowser
下面直接代码进行说明
//// ShopStoretableheaderVIEw.swift// SmartMilk//// Created by lin jiang on 2017/7/11.// copyright © 2017年 greengao. All rights reserved.//import UIKit//添加SDPhotobrowserDelegate代理class ShopStoretableheaderVIEw: UIVIEw,uiscrollviewdelegate,SDPhotobrowserDelegate { var storeImages:NSMutableArray = NSMutableArray() var mainScrollVIEw:UIScrollVIEw? var mainPageControl:UIPageControl? var mainTimer:Timer? var isMIDdleShow:Bool = false overrIDe init(frame: CGRect) { super.init(frame: frame) setScrollVIEwUI() setPageControlUI() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } func setScrollVIEwUI(){ self.mainScrollVIEw = UIScrollVIEw(frame: CGRect(x: 0,y: 0,wIDth: self.wIDth,height: self.height)) // 添加到父视图 self.addSubvIEw(self.mainScrollVIEw!) // 背景颜色 // arc4random() self.mainScrollVIEw?.backgroundcolor = UIcolor.white // 自适应父视图 // self.mainScrollVIEw.autoresizingMask = UIVIEwautoresizing.FlexibleHeight // 其他属性 self.mainScrollVIEw?.isScrollEnabled = true // 上下滚动 self.mainScrollVIEw?.scrollsTotop = true // 点击状态栏时,可以滚动回顶端 self.mainScrollVIEw?.bounces = true // 在最顶端或最底端时,仍然可以滚动,且释放后有动画返回效果 mainScrollVIEw?.isPagingEnabled = true // 分页显示效果 mainScrollVIEw?.showsHorizontalScrollindicator = false // 显示水平滚动条 mainScrollVIEw?.showsverticalScrollindicator = true // 显示垂直滚动条 mainScrollVIEw?.indicatorStyle = UIScrollVIEwIndicatorStyle.white // 滑动条的样式 // 设置内容大小 // self.mainScrollVIEw?.contentSize = CGSize(wIDth: originX,height: scrollVIEwHeight) // 代理 self.mainScrollVIEw?.delegate = self } func setPageControlUI(){ self.mainPageControl = UIPageControl(frame: CGRect(x: (self.wIDth - 150.0) / 2,y: ((self.mainScrollVIEw?.bounds)!.height - 20.0 - 10.0),wIDth: 150.0,height: 20.0)) // 添加到父视图 self.addSubvIEw(self.mainPageControl!) // 背景颜色 self.mainPageControl?.backgroundcolor = UIcolor.clear // 其他属性设置 self.mainPageControl?.numberOfPages = 0 // 总页数 self.mainPageControl?.currentPage = 0 // 当前页数,默认为0,即第一个,实际数量是0~n-1 self.mainPageControl?.pageIndicatorTintcolor = UIcolor.lightGray // 非当前页颜色 self.mainPageControl?.currentPageIndicatorTintcolor = UIcolor.red // 当前页颜色 } func setMainScrollVIEwPageControl(images:[StoreImageModel]) { self.storeImages.removeAllObjects() self.storeImages.addobjects(from: images) for vIEw in (self.mainScrollVIEw?.subvIEws)! { vIEw.removeFromSupervIEw() } var originX:CGfloat = 0.0 for model in images { let imageVIEw = UIImageVIEw(frame: CGRect(x:originX,y:0.0,wIDth:SCREEN_WIDTH,height:self.height)) let url = URL(string: model.storeSmallimg!) let image = UIImage(named: "default_icon") // weak var weakSelf = self imageVIEw.sd_setimage(with: url,placeholderImage: image,options: .retryFailed,completed: { (image,error,cacheType,URL) in }) //添加UI Image VIEw的点击事情 let tap = UITapGestureRecognizer(target: self,action: #selector(onClickedImageEvent(gest:))) imageVIEw.isUserInteractionEnabled = true imageVIEw.addGestureRecognizer(tap) //主要是显示区分显示大点的图和小点的图 if isMIDdleShow == true{ let contentVIEw = UIVIEw(frame: CGRect(x:originX,wIDth:self.wIDth,height:self.height)) let imagexx = (SCREEN_WIDTH - self.height)/2 imageVIEw.frame = CGRect(x:imagexx,wIDth:self.height,height:self.height) contentVIEw.addSubvIEw(imageVIEw) self.mainScrollVIEw?.addSubvIEw(contentVIEw) originX = (contentVIEw.frame.minX + contentVIEw.frame.wIDth) } else { self.mainScrollVIEw?.addSubvIEw(imageVIEw) originX = (imageVIEw.frame.minX + imageVIEw.frame.wIDth) } } self.mainScrollVIEw?.contentSize = CGSize(wIDth: originX,height: self.height) self.mainPageControl?.numberOfPages = images.count // 总页数 self.mainPageControl?.currentPage = 0 // 当前页数,默认为0,即第一个,实际数量是0~n-1 } func scrollVIEwDIDEndDecelerating(_ scrollVIEw: UIScrollVIEw) { MQLog(message:"6 scrollVIEwDIDEndDecelerating") let wIDth = scrollVIEw.frame.wIDth let offsetX = scrollVIEw.contentOffset.x let index = offsetX / wIDth MQLog(message:"当前页是:\(index)") self.mainPageControl?.currentPage = Int(index) } func addTimer() { self.mainTimer = Timer.scheduledTimer(timeInterval: 2.0,target: self,selector: #selector(autoShow),userInfo: nil,repeats: true) } func removerTimer() { if self.mainTimer != nil { self.mainTimer?.invalIDate() self.mainTimer = nil } } func autoShow() { var page:Int = (self.mainPageControl?.currentPage)! let total = (self.mainPageControl?.numberOfPages)! - 1 if total == page { page = 0 } else { page += 1 } // 设置偏移量 let offsetX = CGfloat(page) * (self.mainScrollVIEw?.frame)!.wIDth self.mainScrollVIEw?.setContentOffset(CGPoint(x:offsetX,y:0.0),animated: true) self.mainPageControl?.currentPage = page } func onClickedImageEvent(gest:UITapGestureRecognizer) { let browser = SDPhotobrowser() //显示图片UIImageVIEw的父控件 browser.sourceImagesContainerVIEw = self.mainScrollVIEw //显示图片的总数量 browser.imageCount = self.storeImages.count // if self.storeImages.count > (self.mainPageControl?.currentPage)! { browser.currentimageIndex = (self.mainPageControl?.currentPage)! } else { //要显示的当前图片下标位置 browser.currentimageIndex = 0 } browser.delegate = self browser.show() } /**************************************************************/ //返回当前UIImageVIEw显示的图片 func photobrowser(_ browser: SDPhotobrowser!,placeholderImageFor index: Int) -> UIImage! { if self.isMIDdleShow{ let contentVIEw = self.mainScrollVIEw?.subvIEws[index] let imageVIEw:UIImageVIEw = contentVIEw?.subvIEws[0]as! UIImageVIEw return imageVIEw.image } else { let imageVIEw:UIImageVIEw = self.mainScrollVIEw?.subvIEws[index]as! UIImageVIEw return imageVIEw.image } } //设置要显示图片资源的地址 func photobrowser(_ browser: SDPhotobrowser!,highQualityImageURLFor index: Int) -> URL! { let model = self.storeImages[index] as! StoreImageModel let url = URL(string: model.storeBigimg!) return url }} 运行结果:以上图片资源的地址就不提供了,是公司的资源,百度随便找几张图片就可以了
总结
以上是内存溢出为你收集整理的Swift图片浏览之SDPhotoBrowser的使用全部内容,希望文章能够帮你解决Swift图片浏览之SDPhotoBrowser的使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)