swift使用SDPhotoBriwser浏览图片教程

 更新时间:2021年10月28日 12:00:56   作者:Foreveroriginal  
这篇文章主要为大家介绍了swift如何使用SDPhotoBriwser浏览图片的教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

场景:我们在使用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浏览图片教程的详细内容,更多关于使用SDPhotoBriwser浏览图片的资料请关注程序员之家其它相关文章!

相关文章

  • 详解Swift编程中下标的用法

    详解Swift编程中下标的用法

    这篇文章主要介绍了Swift编程中下标的用法,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • Swift内置的数字类型及基本的转换方法

    Swift内置的数字类型及基本的转换方法

    这篇文章主要介绍了Swift内置的数字类型及基本的转换方法,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • swift中可选值?和!使用的方法示例

    swift中可选值?和!使用的方法示例

    这篇文章主要给大家介绍了关于swift中可选值?和!使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Swift3迁移至Swift4可能遇到的问题小结

    Swift3迁移至Swift4可能遇到的问题小结

    每当看到新的编程语言我总是会有相当大的兴趣,所以下面这篇文章主要给大家介绍了关于Swift3迁移至Swift4可能遇到的问题,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起学习学习吧
    2018-06-06
  • Swift 3中使用FMDB遇到的问题与解决方法

    Swift 3中使用FMDB遇到的问题与解决方法

    相信大家都熟悉OC使用FMDB第三方库,进行数据库操作,增、删、改、查,但最近在Swift 3中使用FMDB遇到了一些问题,下面这篇文章主要给大家介绍了关于在Swift 3中使用FMDB遇到的问题与解决方法,需要的朋友可以参考下。
    2017-07-07
  • Swift4.1转场动画实现侧滑抽屉效果

    Swift4.1转场动画实现侧滑抽屉效果

    这篇文章主要为大家详细介绍了Swift4.1转场动画实现侧滑抽屉效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • 利用Swift如何判断iPhone X机型详解

    利用Swift如何判断iPhone X机型详解

    近日,iPhone X的发布在人们群众引起了很大的轰动,下面这篇文章主要给大家介绍了关于利用Swift如何判断iPhone X机型的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • 仓库模式及其在Swift?项目中的应用详解

    仓库模式及其在Swift?项目中的应用详解

    这篇文章主要为大家介绍了仓库模式及其在Swift?项目中的应用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Swift?中的?JSON?反序列化示例详解

    Swift?中的?JSON?反序列化示例详解

    这篇文章主要为大家介绍了Swift中的JSON?反序列化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 在?Swift?中编写Git?Hooks脚本的方法

    在?Swift?中编写Git?Hooks脚本的方法

    在本例中,我使用了?commit-msg?钩子,它能够在当前提交信息生效前修改此信息,钩子由一个参数调用,该参数是指向包含用户输入的提交消息的文件的路径,这意味着,为了改变提交消息,我们只需要从文件中读取、修改其内容,然后写回调用挂钩的文件
    2022-06-06

最新评论

?


http://www.vxiaotou.com