Swift可向上滑移出界面的欢迎页简单封装
使用:
-(WelcomView*)welcomeView{
if (!_welcomeView) {
_welcomeView = [[NSBundle mainBundle] loadNibNamed:@"WelcomView" owner:nil options:nil].firstObject;
_welcomeView.frame = self.window.frame;
}
return _welcomeView;
} ............
ImgModel *im = [[ImgModel alloc]init];
[im setValuesForKeysWithDictionary:obj];
self.welcomeView.imgArray = @[im];
//MARK:- Timer
extension Timer{
/**
*计时器暂停
*/
func timer_pause(){
self.fireDate = Date.distantFuture
} /**
*计时器继续
*/
func timer_continue(){
self.fireDate = Date.distantPast
}
}
import UIKit
//图片信息模型,根据需求修改
class ImgModel: NSObject {
var PicPath = ""
var PicDescription = ""
var AppSubjectPictureID = ""
var InfoLinkUrl = ""
var ShowSeconds = "" override func setValue(_ value: Any?, forUndefinedKey key: String) {
#if DEBUG
print("ImgModel出现了未定义的字段:\(key)-->\(String(describing: value))")
#endif
}
} class WelcomView: UIView ,UIScrollViewDelegate{
//空间关联
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var pageController: UIPageControl!
@IBOutlet weak var titleLB: UILabel!
@IBOutlet weak var btnBgview: UIView!
@IBOutlet weak var timeLB: UILabel!
@IBOutlet weak var intoMainBtn: UIButton! var stopIndex = 0 //滚动视图停止时候停在的位置
var beginPoint = CGPoint()
var beginPoint1 = CGPoint()
var second = 0
var beginSecond = 0
var timer:Timer?
//图片资源数组
var imgArray = [ImgModel]() {
didSet{
scrollView.tag = 1000
scrollView.contentSize = CGSize(width: CGFloat(imgArray.count)*self.frame.width, height: self.frame.height)
pageController.numberOfPages = imgArray.count
scrollView.isPagingEnabled = true
scrollView.bounces = true
scrollView.showsVerticalScrollIndicator = false
scrollView.showsHorizontalScrollIndicator = false
scrollView.delegate = self
for (index,ele) in imgArray.enumerated() {
let sv = UIScrollView(frame: CGRect(x: CGFloat(index)*self.frame.width, y: 0, width: self.frame.width, height: self.frame.height))
sv.tag = 1000 + (index + 1)
sv.delegate = self
sv.bounces = false
sv.showsVerticalScrollIndicator = false
sv.showsHorizontalScrollIndicator = false
sv.decelerationRate = 0.5
sv.contentSize = CGSize(width: self.frame.width, height: self.frame.height*2)
let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height))
sv.addSubview(imgView)
scrollView.addSubview(sv)
imgView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action:#selector(tapAction))
imgView.addGestureRecognizer(tap)
second = Int(ele.ShowSeconds)!
beginSecond = second
DispatchQueue.main.async {
imgView.sd_setImage(with: URL(string:ele.PicPath), placeholderImage: UIImage(named: "正在加载"), options: .lowPriority, completed: { (img:UIImage?, erro:Error?, type:SDImageCacheType, imgUrl:URL?) in
if erro != nil{
self.removeFromSuperview()
self.showHint((erro?.localizedDescription)!)
}else{
appDelegate.window.addSubview(self)
}
})
}
}
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerNumChange(t:)), userInfo: nil, repeats: true)
//self.perform(#selector(removeSelf), with: nil, afterDelay: TimeInterval(second))
self.bringSubview(toFront: self.btnBgview)
}
} func timerNumChange(t:Timer){
second -= 1
if second >= 0 {
timeLB.text = "\(second)s"
}else{
self.removeSelf()
timer?.invalidate()
}
} @IBAction func btnAction(_ sender: UIButton) {
self.removeFromSuperview()
} //将自己移出界面
func removeSelf(){
UIView.animate(withDuration: 0.5, animations: {
self.center.y = -sheight/2
}) { (done:Bool) in
if done {
self.removeFromSuperview()
}
}
} override func draw(_ rect: CGRect) {
// Drawing code
super.draw(rect)
} override func awakeFromNib() {
super.awakeFromNib()
btnBgview.layer.cornerRadius = 25/2
btnBgview.layer.masksToBounds = true
} //图片点击事件
func tapAction(){
print("点击了第\(stopIndex)张")
} //MARK:ScrollView delegate
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if scrollView.tag > 1000 {
beginPoint = self.center
beginPoint1 = scrollView.contentOffset
timer?.timer_pause()
//NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(removeSelf), object: nil)
}
} func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.tag > 1000 {
self.center.y = beginPoint.y - scrollView.contentOffset.y - beginPoint1.y
for imgView in scrollView.subviews {
if imgView.isKind(of: UIImageView.self) {
imgView.center = CGPoint(x: appDelegate.window.center.x, y: scrollView.center.y + scrollView.contentOffset.y - beginPoint1.y)
break
}
}
}
} func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if scrollView.tag == 1000 {
let offset = scrollView.contentOffset.x
let swidth = UIScreen.main.bounds.size.width
stopIndex = Int(offset / swidth)
pageController.currentPage = stopIndex }else{
scrollView.isScrollEnabled = true
scrollViewDidEndAction(scrollView)
}
} func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if decelerate{
if scrollView.tag > 1000 {
scrollView.isScrollEnabled = false
}
}else{
if scrollView.tag > 1000 {
scrollViewDidEndAction(scrollView)
}
}
} //MARK:滚动结束(界面速度为0)
func scrollViewDidEndAction(_ scrollView: UIScrollView){ if self.center.y < 0 {
UIView.animate(withDuration: 0.5, animations: {
self.center = CGPoint(x: self.center.x, y: appDelegate.window.center.y * -2)
}) { (done:Bool) in
if done {
self.removeFromSuperview()
}
}
}else{
UIView.animate(withDuration: 0.3, delay: 0.1, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.1, options: .curveLinear, animations: {
self.center = appDelegate.window.center
}) { (done:Bool) in
if done {
scrollView.contentOffset = self.beginPoint1
for imgView in scrollView.subviews {
if imgView.isKind(of: UIImageView.self) {
imgView.center = CGPoint(x: appDelegate.window.center.x, y: scrollView.center.y)
break
}
}
self.second = self.beginSecond + 1
self.timer?.timer_continue()
}
}
}
}
}
XIB效果图
Swift可向上滑移出界面的欢迎页简单封装的更多相关文章
- swift开发之--简单封装Alamofire请求类以及简单使用SnapKit
以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出! 具体效果如下,先上图: 点击按钮的时候,请求数据,数据结构如下: { ; reason = ...
- iOS开发Swift篇(02) NSThread线程相关简单说明
iOS开发Swift篇(02) NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThread在s ...
- iOS开发笔记(Swift)-通用App安装引导页的实现
之前一直做的项目都是基于OC开发的,最近开始尝试使用Swift语言来重写整个项目. 本篇文章主要是讲述如何使用Swift来实现常见的通用App安装引导界面. 效果预览: 实现思路: 主要是采用了UIS ...
- 页面的Tab选项卡 简单实例
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- 【Swift】 GET&POST请求 网络缓存的简单处理
GET & POST 的对比 源码:https://github.com/SpongeBob-GitHub/Get-Post.git 1. URL - GET 所有的参数都包含在 URL 中 ...
- vuex存取token,http简单封装、模拟登入权限校验操作、路由懒加载的几种方式、vue单页设置title
1.config index.js下面的跨域代理设置: proxyTable: { '/api': { target: 'http://xxxx', //要访问的后端接口 changeOrigin: ...
- Swift - 简单封装一个工具类模板
创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...
- swift:用UITabBarController、UINavigationController、模态窗口简单的搭建一个QQ界面
搭建一个QQ界面其实是一个很简单的实现,需要几种切换视图的控制器组合一起使用,即导航控制器.标签栏控制器.模态窗口.其中,将标签栏控制器设置为window的rootViewController,因为Q ...
- iOS开发——UI篇Swift篇&玩转UItableView(四)自定义&封装
UItableView自定义&封装 一:Model class AppsModel: NSObject { //定义模型的三个属性 var imageName:String! //图片名称 v ...
随机推荐
- codeforces 数字区分 搜索
Jokewithpermutation Input file: joke.inOutput file: joke.outJoey had saved a permutation of integers f ...
- 判断\r\n结束标准
ucPrev==0x0D&&ucCur==0x0A \r\n uint8_t ucPrev =0,ucCur = 0; uint32_t recvlen = 0; for (; uiL ...
- CSS实现背景透明而背景上的文字不透明
在我们设计制作一些网页的时候可能会用到半透明的效果,首先我们可能会想到用PNG图片处理,当然这是一个不错的办法,唯一的兼容性问题就是ie6 下的BUG,但这也不困难,加上一段js处理就行了.但假如我们 ...
- git舍弃文件更改
未进行任何提交,即文件更改在工作区 # filename 对应进行操作的文件名 git checkout -- filename 已用git add 命令提交,即文件更改在暂存区 # 舍弃暂存区的修改 ...
- 2018.10.25 bzo1227: [SDOI2009]虔诚的墓主人(组合数学+扫描线+bit)
传送门 有点难调啊.其实是我自己sb了 不过交上去1A1A1A还是平衡了一下心态. 所以这道题怎么做呢? 我们考虑对于一个点(x,y)(x,y)(x,y)如果这个点成为中心,正左/右/上/下分别有l/ ...
- POSTMAN 数据关联
概述 在使用postman测试接口是,我们可能需要先获取一个token,然后再将这个token发送到第二个请求.这个需要做postman的关联,一次性完成这两个测试. 实现方法 1.编写两个控制器方法 ...
- linux yum 本地源配置
1.查看硬盘情况 lsblk sr0就是光驱了 2.执行挂载命令 查看光驱cd /devls 执行命令 mount /dev/sr0 /mnt 将光驱挂载到 /mnt 目录 这样光驱就挂载好了 2. ...
- SpringBoot初探
一:项目创建 个人用的是IDEA来做Demo的: 1.先创建一个空项目,然后创建一个基于Maven的java application项目: 2.创建好后配置pom.xml文件并最终reimport & ...
- 安卓4.2用adb 获取屏幕分辨率等信息
在终端输入adb shell dumpsys: 终端会打印出一些service list 用adb shell dumpsys+service名即可查询相应的信息. 屏幕分辨率用adb shell d ...
- 如何制作一个自适应手机、电脑、ipad的网页方法总结
进入2015年,手机上网的用户已经越来越多,已经赶超PC端.随着2G.3G.4G.免费WIFI和无线基站的不断普及,越来越多的人开始使用手机上网. 移动设备正超过桌面设备,成为访问互联网的最常见终端. ...