iOS开发项目实战——Swift实现ScrollView滚动栏功能
手机作为一个小屏设备,须要显示的信息往往无法在一个屏幕上显示,此时就须要使用到滚动栏,当然除了像TableView这样能够自带滚动功能的。
假设一个界面上View较多,那就必须要使用到ScrollView了。如今我们将会使用Swift在iOS上实现滚动效果。详细实现例如以下:
(1)创建一个新的iOS项目。语言选择Swift,并在Main.storyboard中拖入一个ScrollView控件。然后在ScrollView中拖入几张照片,等下能够使用滚动功能查看照片。界面例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">。
(2)把ScrollView和几个ImageView拖拽与代码进行Outlet绑定。绑定后代码例如以下:
- @IBOutlet weak var homepageScrollView: UIScrollView! //这个是滚动栏。
- @IBOutlet weak var image1: UIImageView!
- @IBOutlet weak var image2: UIImageView!
- @IBOutlet weak var image3: UIImageView!
(3)然后在viewDidLoad()方法中实现 滚动栏的代码,注意例如以下contentSize的使用,必须设置ScrollView的内容大小,界面才会有滚动效果,而且这个大小是能够自己随意输入的。你设置多大的长和宽,整个ScrollView就像画布。这个画布的大小就是多大。然后因为屏幕较小。仅仅能显示一部分,所以你就能够通过滑动查看其它未见的部分。
- override func viewDidLoad() {
- super.viewDidLoad()
- //在滚动栏中添加View。
- homepageScrollView.addSubview(image1)//不断在ScrollView中加入子控件;
- homepageScrollView.addSubview(image2)
- homepageScrollView.addSubview(image3)
- homepageScrollView.contentSize=CGSize(width: image1.bounds.size.width, height: image1.bounds.size.height+image2.bounds.size.height+image3.bounds.size.height+500)
- //注意要加入全部控件的高度到ScrollView中;也能够自己定义长和宽。
- }
(4)执行程序。查看结果。
。
。
(5)可能会有人有疑问,我上面的图片都是直接加入到storyboard中的。都是写死的。我如今通过代码动态添加一张图片,而且加入到ScrollView中。以此来真正实现滚动栏的功能;
动态显示图片代码:
- //这里的“image4”是通过代码动态加入的。而不是在storyboard中写死的,加在image3以下。
- var imageView:UIImage = UIImage(named: "gallery4")!
- //gallery4是这张图片的名字,不须要扩展名;
- var image4:UIImageView = UIImageView(frame: CGRect(origin: CGPoint(x: 0,y: image1.bounds.size.height+image2.bounds.size.height+image3.bounds.size.height),
- size: image1.bounds.size))
- //设置这张图片的显示位置和大小。原图较大。我设置为和image1大小一样;
- image4.image = imageView
继续在ScrollView中添加这个View:
- homepageScrollView.addSubview(image4)
最后别忘了在contentSize中添加对应的长度:
- homepageScrollView.contentSize=CGSize(width: image1.bounds.size.width, height: image1.bounds.size.height+image2.bounds.size.height+image3.bounds.size.height+
- image4.bounds.size.height+500)//注意要加入全部控件的高度到ScrollView中;也能够自己定义长和宽;
所以最后整个类中的代码例如以下:
- class HomepageViewController: UIViewController,UIScrollViewDelegate{ //注意要实现这个Delegate托付。
- @IBOutlet weak var homepageScrollView: UIScrollView! //这个是滚动栏;
- @IBOutlet weak var image1: UIImageView!
- @IBOutlet weak var image2: UIImageView!
- @IBOutlet weak var image3: UIImageView!
- override func viewDidLoad() {
- super.viewDidLoad()
- //这里的“image4”是通过代码动态加入的,而不是在storyboard中写死的。加在image3以下。
- var imageView:UIImage = UIImage(named: "gallery4")!
- //gallery4是这张图片的名字,不须要扩展名;
- var image4:UIImageView = UIImageView(frame: CGRect(origin: CGPoint(x: 0,y: image1.bounds.size.height+image2.bounds.size.height+image3.bounds.size.height),
- size: image1.bounds.size))
- //设置这张图片的显示位置和大小。原图较大,我设置为和image1大小一样;
- image4.image = imageView
- //在滚动栏中添加View;
- homepageScrollView.addSubview(image1)//不断在ScrollView中加入子控件。
- homepageScrollView.addSubview(image2)
- homepageScrollView.addSubview(image3)
- homepageScrollView.addSubview(image4)
- homepageScrollView.contentSize=CGSize(width: image1.bounds.size.width, height: image1.bounds.size.height+image2.bounds.size.height+image3.bounds.size.height+
- image4.bounds.size.height+500)//注意要加入全部控件的高度到ScrollView中。也能够自己定义长和宽;
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- ///////////////////////////////////////////
- }
- }
(6)最后执行结果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">。
事实上ScrollView滚动栏还有非常多其它的属性设置和特性,有一部分也能够在storyboard中进行设置。是博大精深的。我们以后在开发中在慢慢学习。
github主页:https://github.com/chenyufeng1991 。
欢迎大家訪问!
iOS开发项目实战——Swift实现ScrollView滚动栏功能的更多相关文章
- iOS开发项目实战——Swift实现图片轮播与浏览
近期開始开发一个新的iOS应用,自己决定使用Swift.进行了几天之后,发现了一个非常严峻的问题.那就是无论是书籍,还是网络资源,关于Swift的实在是太少了,随便一搜全都是OC实现某某某功能.就算是 ...
- iOS开发——项目实战总结&经典错误一
经典错误一 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7, VA 运行报错 出现的原因:armv7s ...
- IOS开发-项目实战-点赞功能的实现
实现思路: 1.每一条新闻就是一个cell,在cell上添加点赞按钮. 2.让cell的控制器成为自定义cell的代理,将点击了哪一个cell放在代理方法中传出去. 3.并将这条新闻的ID和当前用户的 ...
- iOS开发——项目实战总结&Block使用注意点浅析
Block使用注意点浅析 1.在使用block前需要对block指针做判空处理. 不判空直接使用,一旦指针为空直接产生崩溃. if (!self.isOnlyNet) { if (succBlock ...
- iOS开发——项目实战总结&带你看看Objective-C的精髓
带你看看Objective-C的精髓 1:接口与实现 @interface...@end @implementation...@end @class 接口(头文件) 实现文件 向前引用 注:类别通过增 ...
- iOS开发——项目实战总结&关于随机量
关于随机量 rand 是一个标准的 C 函数. random 是定义为 POSIX 标准的一部分. arc4random 是在 BSD 和派生平台. 随机数 arc4random_uniform(N) ...
- iOS开发——项目实战总结&数据持久化分析
数据持久化分析 plist文件(属性列表) preference(偏好设置) NSKeyedArchiver(归档) SQLite 3 CoreData 当存储大块数据时你会怎么做? 你有很多选择,比 ...
- iOS开发——项目实战OC篇&类QQ黏性按钮(封装)
类QQ粘性按钮(封装) 那个,先来说说原理吧: 这里原理就是,在界面设置两个控件一个按钮在上面,一个View在下面(同样大小),当我们拖动按钮的时候显示下面的View,view不移动,但是会根据按钮中 ...
- 李洪强iOS开发之后使用XIB实现横向滚动的UIScrollView
李洪强iOS开发之后使用XIB实现横向滚动的UIScrollView 11111222
随机推荐
- reboot---重启Linux系统
reboot命令用来重新启动正在运行的Linux操作系统. 语法 reboot(选项) 选项 -d:重新开机时不把数据写入记录文件/var/tmp/wtmp.本参数具有“-n”参数效果: -f:强制重 ...
- Webservice银行报文接口设计
Preface: 合理的软件架构设计其好处是不言而喻的,系统具有清晰的软件结构,良好的可扩展性,类的职能单一明确,系统的复杂度底.此前的一个实际项目中总结了些关于OO设计的实际应用,主要是围绕'高 ...
- AutoCAD 许可管理器不起作用,或未正确安装,现在将关闭
问题描述 重新安装了也还是这样,而且第二次打开都跳不出申请码界面就关闭了. 问题原因,初步认为:AutoCAD 在首次弹出申请激活类型的类型时,直接选择了网络激活,而且没有激活成功.再想通过激活码的方 ...
- 缩放文本框ExpandTextView
效果图: 代码: import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import ...
- JXL.jar简单封装Excel读写操作
1.分析 一个excel文件能够有多页,每页excel中能够有多行,每行中能够有多列.用面向对象的思想能够把一行中的某列看作是一个String对象,一行看作是一个包括多个列的对象.一页是包括多行的对面 ...
- Centos 6.8 安装 Protocol Buffers , v3.2.0有 BUG ,安装 3.1.0
Centos 6.8 安装 Protocol Buffers , v3.2.0有 BUG ,安装 3.1.0 切换到用户目录 cd ~ 安装 python2.7,须加入zlib wget http ...
- carousel轮播器
<div id="myCarousel" class="carousel slide" data-ride="carousel" st ...
- LAN8720A网络模块的使用问题
一.LAN8720A模块驱动电路 最近在调试STM32F4驱动LAN8720A网络模块,在做方案前参考是正点原子的LAN8720A的驱动电路方案,但是从网上买回来的LAN8720A模块用正点原子的例程 ...
- eclipse4.3怎么集成jadclipse追踪源代码,现在windows-preferences-java
A.将net.sf.jadclipse_3.2.4.jar复制到D:\leaf\eclipse\plugins目录下. B.在d:\leaf下建立ecliplsePlungin\jadclips ...
- canvas.toDataURL() gives “Security Error” in IE 11
http://stackoverflow.com/questions/30101143/canvas-todataurl-gives-security-error-in-ie-11