iOS开发笔记(Swift)-通用App安装引导页的实现
之前一直做的项目都是基于OC开发的,最近开始尝试使用Swift语言来重写整个项目。
本篇文章主要是讲述如何使用Swift来实现常见的通用App安装引导界面。
效果预览:

实现思路:
主要是采用了UIScrollView作为容器,将其ContentSize的宽度设置为(引导页数量)*屏幕宽度,并将pagingEnabled设为true,隐藏滚动条。作为指示的UIPageControl与UIScrollView直接添加到self.view之上,并保存UiPageControl居于最上。
实现代码:
import UIKit
class YSYGuideViewController: UIViewController,UIScrollViewDelegate {
var scrollView:UIScrollView!
var pageControl:UIPageControl!
var startBtn:UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
loadCustomLayout()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//scrollview委托
func scrollViewDidScroll(scrollView: UIScrollView) {
var offset=scrollView.contentOffset
pageControl.currentPage=Int(offset.x/Yunshouyi.SCREEN_WIDTH)
if(pageControl.currentPage==2){
startBtn.hidden=false
}else{
startBtn.hidden=true
}
}
//载入自定义布局
func loadCustomLayout(){
scrollView=UIScrollView(frame: CGRectMake(0, 0, Yunshouyi.SCREEN_WIDTH, Yunshouyi.SCREEN_HEIGHT))
scrollView.pagingEnabled=true
scrollView.showsHorizontalScrollIndicator=false
scrollView.showsVerticalScrollIndicator=false
scrollView.contentSize=CGSizeMake(3*Yunshouyi.SCREEN_WIDTH, Yunshouyi.SCREEN_HEIGHT)
for i in 1...4{
var image=UIImage(named: "Guideline-\(i)")
var imageView=UIImageView(image: image)
imageView.frame=CGRectMake(CGFloat((i-1))*Yunshouyi.SCREEN_WIDTH, 0, Yunshouyi.SCREEN_WIDTH, Yunshouyi.SCREEN_HEIGHT)
imageView.contentMode = UIViewContentMode.ScaleToFill
scrollView.addSubview(imageView)
}
pageControl=UIPageControl(frame: CGRectMake(Yunshouyi.SCREEN_WIDTH/2-100, Yunshouyi.SCREEN_HEIGHT-100, 200, 100))
startBtn=UIButton(frame: CGRectMake(Yunshouyi.SCREEN_WIDTH/2-60, Yunshouyi.SCREEN_HEIGHT/2+50, 120, 35))
pageControl.numberOfPages=3;
pageControl.currentPage=0
startBtn.setTitle("马上体验", forState: UIControlState.Normal)
startBtn.setBackgroundImage(UIImage(named: "StartButton"), forState: UIControlState.Normal)
startBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
startBtn.addTarget(self, action: "guideOver", forControlEvents: UIControlEvents.TouchUpInside)
startBtn.hidden=true
scrollView.bounces=false
scrollView.delegate=self
self.view.addSubview(scrollView)
self.view.addSubview(pageControl)
self.view.addSubview(startBtn)
}
//开始使用app
func guideOver(){
var mainVC=UINavigationController(rootViewController: UITableViewController())
self.presentViewController(mainVC, animated: true, completion: nil)
}
override func prefersStatusBarHidden() -> Bool {
return true
}
}
iOS开发笔记(Swift)-通用App安装引导页的实现的更多相关文章
- 菜鸟手下的iOS开发笔记(swift)
在阳春4月的一天晨会上,有一个老板和蔼的对他的一个菜鸟手下说:“你既然会Android,那你能不能开发iOS?” 不是说好的要外包的吗?内心跌宕,但是表面淡定的菜鸟手下弱弱的回道:“可以试试”. 第二 ...
- iOS 开发笔记-获取某个APP素材
2019.02.01 更新 以下这种方式只适合越狱的手机,目前12.1以后,iTools已经不适合了,请看最下面第二种方式. 有时候,我们看到别人的APP做得挺漂亮的,那么我们想查看该APP的图片素材 ...
- 【Swift】iOS开发笔记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- iOS开发笔记7:Text、UI交互细节、两个动画效果等
Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...
- IOS开发笔记 IOS如何访问通讯录
IOS开发笔记 IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- iOS开发笔记-两种单例模式的写法
iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...
- iOS开发笔记--什么时候调用layoutSubviews
iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
随机推荐
- 多层josn数据 修改
var aa = { a: 1, b: { c: 1, d: 1 }, e: [{ f: 1, g: 2 }, { h: 1, i: { j: 3, k: [{ l: 55, m: [1, 2, 3, ...
- java-web的请求和响应机制中的request请求
1 Request对象和Response对象的原理 1.1 都是由服务器创建的 我们使用它 1.2 Request对象 是获取请求消息 response对象是响应 2 request 对象的继 ...
- DJango 基础(7)
常用查询字段常用类型与模型关系表 知识点: 常用的查询 Field的常用参数 常用的模型字段类型 常用的查询 获取所有记录:rs = User.objects.all()获取第一条数据:rs = Us ...
- netty(六) websocket开发应用
package com.lance.net.server.common; import java.net.InetSocketAddress; import org.springframework.s ...
- 安装64位office时,弹出提示,要求卸载32位office
运行 regedit,进入到HKEY_CLASSES_ROOT\Installer\Products下,删除0000510开头的项或00002开头项.然后重启计算机. 参考: https://blo ...
- Linux 子网掩码计算, 二进制十进制互相转换
看下边例子 192.168.0.1/24 192.168.0.1/32 192.168.0.1/28 上边24,32,28对应的掩码都是什么,怎么计算的 24,32,28,对应的就是多少个二进制的1 ...
- 快速创建IIS站点并设置权限
net user WebSiteUser WebSiteUserWebSiteUser /add /yWMIC Path Win32_UserAccount Where Name="Web ...
- JQuery复习心得
this === event.currentTarget event.stopPropagation 阻止冒泡 http:www.css88.com JQ和原生JS入口函数的区别: 书写个数 ...
- android 平台 java和javascript 通信问题 A WebView method was called on thread 'JavaBridge'.
java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge ...
- redis在游戏服务器中的使用初探(四) redis应用
文章系列先介绍环境搭建 介绍redis操作和代码编写运行 这是典型的实战工程过程.那么我们为何要使用redis而不是常规的数据库比如 mysql呢? 因为KV内存数据库最大的优势所有数据全部存储在内 ...