有视差的滚动视图-Parallax ScrollView In Swift
发布日期:2022-03-18 08:27:44 浏览次数:36 分类:技术文章

本文共 2329 字,大约阅读时间需要 7 分钟。

翻译自:

这里写图片描述

这周,我有机会在一个私有的项目上使用了UICollectionView。实际上,我在UICollectionViewCell上应用了一种简单的视差效果。介绍下,视差效果的走红得益于2011年网页设计师在HTML5和CSS3中的使用。

我要提醒的是视差效果并不适合每一个人,应该谨慎的使用它(还记得最初在iPhone上使用时,人们会感到眩晕)。虽然,它是一个非常棒的特色。

直接要代码,在这里。下面是一个简短的教程和一些关于视差的重点片段。

这个教程有重要的两步:

  1. 设置collection view的数据源
  2. 实现视差效果

使用Single View Application模板来创建一个新的工程。在Xcode创建项目后,会有 AppDelegate, ViewController, Main storyboard 和一堆其它的文件。

打开Main.storyboard,替换ViewController为CollectionViewController。设置table view的size为紧凑型:

这里写图片描述

调整cell的大小,宽度与CollectionView的宽度相同,高度为160:

这里写图片描述

选中cell后,设置identifier为:

parallaxCell

cell上添加UIImageView,调整其大小为320X200(UIImageView 比cell要高)。

这里写图片描述

接下来是,设置content view mode为 Aspect Fil。这很重要。

这里写图片描述

现在创建一个自定义的cell。选择File > New > File,选择Cocoa Touch Class 。命名为ParallaxCollectionViewCell,继承自UICollectionViewCell。

选择ParallaxCollectionViewCell类,添加如下的全局常亮:

let ImageHeight: CGFloat = 200.0let OffsetSpeed: CGFloat = 25.0

为UIImageView声明一个outlet:

@IBOutlet var imageView: UIImageView

图片变量来持有你的图片(利用didSet来设置imageView的image)

var image: UIImage = UIImage() {    didSet {        imageView.image = image    }}

实现offset函数,来偏移image view:

func offset(offset: CGPoint) {    imageView.frame = CGRectOffset(self.imageView.bounds, offset.x, offset.y)}

选择ViewController,改变其继承为UICollectionViewController。声明一个常量:

let parallaxCellIdentifier = "parallaxCell"

声明一个数组来保存图片数据:

var images = [String]()

接下来,下载图片,加入到项目中。在你的ViewController中,添加如下的代码到viewDidLoad: 函数中:

for i in 0...14 {    images.append("\(i)@2x")}

实现数据源函数:

override func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int {    return images.count}
override func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {    let parallaxCell = collectionView.dequeueReusableCellWithReuseIdentifier(parallaxCellIdentifier, forIndexPath: indexPath) as ParallaxCollectionViewCell    parallaxCell.image = UIImage(named: images[indexPath.row])    return parallaxCell}

接下来,实现UIScrollView的代理方法:

override func scrollViewDidScroll(scrollView: UIScrollView!) {    if let visibleCells = collectionView.visibleCells() as? [ParallaxCollectionViewCell] {    for parallaxCell in visibleCells {    var yOffset = ((collectionView.contentOffset.y - parallaxCell.frame.origin.y) / ImageHeight) * OffsetSpeed    parallaxCell.offset(CGPointMake(0.0, yOffset))  } }}

运行项目,滚动看看!

转载地址:https://windzen.blog.csdn.net/article/details/53610310 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:点击HTML的图片来预览图片
下一篇:UIWebView中的图文混排

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月01日 11时19分49秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php foreach 数据库,php – 使用foreach将数据库检索的数据排列在HTML表中 2019-04-21
拉格朗日matlab编程例题,Matlab习题讲解.doc 2019-04-21
case是不是php语言关键字,PHP语言 switch 的一个注意点 2019-04-21
linux php mkdir失败,linux – mkdir错误:参数无效 2019-04-21
config.php渗透,phpMyAdmin 渗透利用总结 2019-04-21
java list 合并 重复的数据_Java ArrayList合并并删除重复数据3种方法 2019-04-21
android volley 上传图片 和参数,android - 使用android中的volley将图像上传到multipart中的服务器 - 堆栈内存溢出... 2019-04-21
android开发的取消清空按钮,Android开发实现带清空按钮的EditText示例 2019-04-21
android gp服务,ArcGIS Runtime SDK for Android开发之调用GP服务(异步调用) 2019-04-21
mysql整体会滚_滚mysql 2019-04-21
向mysql数据库中添加批量数据类型_使用JDBC在MySQL数据库中快速批量插入数据 2019-04-21
最全的mysql 5.7.13_最全的mysql 5.7.13 安装配置方法图文教程(linux) 强烈推荐! 2019-04-21
mssql连接mysql数据库文件_在本地 怎么远程连接MSSQL数据库 2019-04-21
mssql 远程无法连接mysql_解决SQLServer远程连接失败的问题 2019-04-21
linux mysql c++编程_Linux下进行MYSQL的C++编程起步手记 2019-04-21
Maria数据库怎么复制到mysql_MySQL、MariaDB数据库的AB复制配置过程 2019-04-21
mysql5.6 icp mrr bak_【mysql】关于ICP、MRR、BKA等特性 2019-04-21
mysql utf8跟utf8mb4_MySQL utf8 和 utf8mb4 的区别 2019-04-21
docker mysql开机自启动_Docker学习4-学会如何让容器开机自启服务【坑】 2019-04-21
在mysql中删除表正确的是什么_在MySQL中删除表的操作教程 2019-04-21