服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Swift - swift使用SDPhotoBriwser浏览图片教程

swift使用SDPhotoBriwser浏览图片教程

2021-12-24 14:16Foreveroriginal Swift

这篇文章主要为大家介绍了swift如何使用SDPhotoBriwser浏览图片的教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

场景:我们在使用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, y:0.0, width:self.width, height:self.height))
              let imagexx = (SCREEN_WIDTH - self.height)/2                
              imageView.frame = CGRect(x:imagexx, y:0.0, 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使用SDPhotoBriwser浏览图片教程

swift使用SDPhotoBriwser浏览图片教程

以上就是swift使用SDPhotoBriwser浏览图片教程的详细内容,更多关于使用SDPhotoBriwser浏览图片的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/moqj_123/article/details/75092270

延伸 · 阅读

精彩推荐
  • Swiftswift相册相机的权限处理示例详解

    swift相册相机的权限处理示例详解

    在iOS7以后要打开手机摄像头或者相册的话都需要权限,在iOS9中更是更新了相册相关api的调用,那么下面这篇文章主要给大家介绍了关于swift相册相机权限处...

    hello老文12682021-01-08
  • Swift详解Swift 之clipped是什么如何用

    详解Swift 之clipped是什么如何用

    这篇文章主要介绍了详解Swift 之clipped是什么如何用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    iCloudEnd8532021-05-28
  • Swift分析Swift性能高效的原因

    分析Swift性能高效的原因

    绝大多数公司选择Swift语言开发iOS应用,主要原因是因为Swift相比Objc有更快的运行效率,更加安全的类型检测,更多现代语言的特性提升开发效率;这一系...

    louis_wang9092021-01-16
  • SwiftSwift网络请求库Alamofire使用详解

    Swift网络请求库Alamofire使用详解

    这篇文章主要为大家详细介绍了Swift网络请求库Alamofire的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    lv灬陈强56682021-01-06
  • SwiftSwift中排序算法的简单取舍详解

    Swift中排序算法的简单取舍详解

    对于排序算法, 通常简单的, 为大家所熟知的有, 选择排序, 冒泡排序, 快速排序, 当然还有哈希, 桶排序之类的, 本文仅比较最为常见的选择, 冒泡和快排,文...

    Castie111012021-01-10
  • SwiftSwift 基本数据类型详解总结

    Swift 基本数据类型详解总结

    在我们使用任何程序语言编程时,需要使用各种数据类型来存储不同的信息。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明...

    Lucky_William4672021-12-26
  • Swift浅谈在Swift中关于函数指针的实现

    浅谈在Swift中关于函数指针的实现

    这篇文章主要介绍了浅谈在Swift中关于函数指针的实现,是作者根据C语言的指针特性在Swifft中做出的一个实验,需要的朋友可以参考下...

    Swift教程网4372020-12-21
  • SwiftSwift算法之栈和队列的实现方法示例

    Swift算法之栈和队列的实现方法示例

    Swift语言中没有内设的栈和队列,很多扩展库中使用Generic Type来实现栈或是队列。下面这篇文章就来给大家详细介绍了Swift算法之栈和队列的实现方法,需要...

    李峰峰10002021-01-05