美文网首页程序员
iOS 无失真横向切换图片

iOS 无失真横向切换图片

作者: henyinsitan | 来源:发表于2016-12-14 16:40 被阅读292次

控件效果如下

搜索了半天,网上找不到类似效果的Demo,于是自己就码了一个出来。刚开始的时候是用三个UIImageView做了一个出来,功能是实现了,并且比用UIScrollView做的内存占用更小,但是滑动起来不是那么流畅,于是就放弃了这种方法,还是用UIScrollView码了一个出来,在此与大家分享下实现的思路。

实现原理:利用UIScrollView作为载体 + 动态修改AutoLayout

一. 控件的构成


此控件由四层视图组成如上图:

第一层:UIScrollView(代码里属性表示为lScrollView)。

第二层:宽度为图片数量 * 每页的宽度值,高度可变化并且加载在lScrollView上的View(代码里属性表示为scrollContentView)。

第三层:由n(n=图片数量)个view(代码里自定义为UniteView,宽度为固定的每页宽度,位置与scrollContentView的上下边界约束好了的)并排挨个加载在scrollContentView上的组成的。

第四层:UIImageView(代码里自定义为XHSImgView)是加载在UniteView上的,初始位置是与UniteView的左上下边界约束好并且自身有个宽高比约束。

看了层次结构,有的朋友可能要问为什么UIImageView不直接加在UIScollView上,不要急容我慢慢道来:

加载scrollContentView是因为,若直接把UIImageView加在UIScrollView上并加上约束,UIScrollView的contentSize依赖于subviews,如果subviews的size再依赖于UIScrollView,则布局引擎就混乱了。

UniteView装载XHSImgView是因为,UniteView是定宽的,加载的XHSImgView是与UniteView的左上下边界约束好并且自身有个宽高比约束的,这样随着UniteView高度的变化,XHSImgView的高度也根据约束变化,并且因为自身的宽高比约束永远不会失真。

二.  功能的实现

1. 首先是图片的数据一定要在图片还没加载前就要知道每张图size,然后利用- (void)scrollViewDidScroll:(UIScrollView *)scrollView这个代理方法,根据scrollView.contentOffset.x可以计算滑动的方向和滑动到了那一页。因为提前知道了图片的size,就可以计算出图片从上一页切换到下一页时前后的高度差,从而计算出每单位移动距离scrollContentView的高度变化,约束好了的UniteViewXHSImgView的size就会更随scrollContentView的高度变化。

2. 在初始化的时候所有的XHSImgView都是靠左约束的,但是滑动切换过程中就会动态改变约束,不管向左还是向右滑动,当前图约束靠右,当前图下一张图的约束靠左。

好了,核心思路就是这样,详情请见代码。PS:第一次在简书上写文章,文笔不好请大家见谅,有不懂的同学可以qq我,我的qq是1083268197,加的时候请注明是从这篇文章来的。

Demo地址

相关文章

  • iOS 图片细节解释标签

    效果如下: 此功能的载体用到了“图片无失真横向切换”,若想知道图片无失真横向切换的原理请到 www.jianshu...

  • iOS 无失真横向切换图片

    控件效果如下: 搜索了半天,网上找不到类似效果的Demo,于是自己就码了一个出来。刚开始的时候是用三个UIImag...

  • iOS开发 图片压缩失真问题解决

    iOS开发过程中,经常会用到图片压缩,总结一下 1.这种方法会使图片失真 2.此方法图片不会失真

  • iOS 放大图片不失真

    如果你有一张20x20的图片,老板让你放到200x200的UIImageView上面,并且要求不失真,你会怎么做呢...

  • iOS UICollection做横向滑屏-图片横向滑动启动页

    关于图片的横向滑动或者iOS APP的图片启动页的横向滑动启动图 今天做了一个小的demo,很简单,希望能帮助大家...

  • 图片失真

    解决图片失真只需要两行代码: cell.imageView.contentMode = UIViewContent...

  • iOS上传图片颜色失真问题

    app上传前的原图与上传后CDN上压缩图对比颜色有失真具体描述可见:拒绝黯淡!教你还原iPhone 7照片本色 问...

  • iOS 加载图片查看大图失真

    一般加载iOS得网络图片用的很好的第三方框架是SDWebImage,然后我们会有一种点击查看大图得需求。一般这种需...

  • iOS 压缩图片不失真

    下面这个方法的确能压缩图片,但是图片会变形 因为是按照指定尺寸压缩,导致图片压缩之后模糊,失真 按照屏幕的尺寸压缩...

  • iOS Swift CollectionView 列表与网格布局

    iOS Swift CollectionView 列表与网格布局之间切换(带动画) 图片示例:

网友评论

    本文标题:iOS 无失真横向切换图片

    本文链接:https://www.haomeiwen.com/subject/bkivmttx.html