//

//  ViewController.swift

//  animationAlert

//

//  Created by su on 15/12/9.

//  Copyright © 2015年 tian. All rights reserved.

//

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

//灰色的遮挡板

let overLayView = UIView(frame: self.view.bounds)

overLayView.backgroundColor = UIColor.blackColor()

overLayView.alpha = 0

//加入场景

self.view.addSubview(overLayView)

//警告框相关的代码

//警告框的宽度

let alerDimension:CGFloat = 250

let alertViewFrame = CGRect(x: self.view.bounds.size.width / 2 - alerDimension / 2, y: self.view!.bounds.size.height / 2 - alerDimension / 2, width: alerDimension, height: alerDimension)

let alertView  = UIView(frame: alertViewFrame)

alertView.backgroundColor = UIColor(patternImage: UIImage(named: "alert_box")!)

alertView.alpha = 1

//警告框初始尺寸为1.2 倍

alertView.transform = CGAffineTransformMakeScale(1.2, 1.2)

//设置圆角半径

alertView.layer.cornerRadius = 10

//设置阴影

//颜色

alertView.layer.shadowColor = UIColor.blackColor().CGColor

//阴影偏移

alertView.layer.shadowOffset = CGSizeMake(0, 5)

//阴影透明度

alertView.layer.shadowOpacity = 0

//阴影的半径

alertView.layer.shadowRadius = 10

self.view.addSubview(alertView)

//延时设置

var minseconds = 1 * Double(NSEC_PER_MSEC)

var dtime = dispatch_time(DISPATCH_TIME_NOW, Int64(minseconds))

dispatch_after(dtime, dispatch_get_main_queue()) { () -> Void in

//自定义警告框动画的上半部分

UIView.animateWithDuration(0.3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in

overLayView.alpha = 0.3

alertView.alpha = 1

}, completion: nil)

let scale = JNWSpringAnimation(keyPath: "transform.scale")

scale.damping = 14

scale.stiffness = 14

scale.mass = 1

scale.fromValue = 1.2

scale.toValue = 1

alertView.layer.addAnimation(scale, forKey: scale.keyPath)

alertView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1)

}

minseconds = 3 * Double(NSEC_PER_MSEC)

dtime = dispatch_time(DISPATCH_TIME_NOW, Int64(minseconds))

dispatch_after(dtime, dispatch_get_main_queue()) { () -> Void in

//下半部分消失

UIView.animateWithDuration(1, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in

overLayView.alpha = 0

alertView.alpha = 0

}, completion: nil)

let scaleOut = JNWSpringAnimation(keyPath: "tranform.scale")

scaleOut.damping = 14

scaleOut.stiffness = 14

scaleOut.mass = 1

scaleOut.fromValue = 1

scaleOut.toValue = 0.7

alertView.layer.addAnimation(scaleOut, forKey: scaleOut.keyPath)

alertView.transform = CGAffineTransformMakeScale(0.7, 0.7)

}

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

swift 自定义弹框的更多相关文章

  1. vue3系列:vue3.0自定义弹框组件V3Popup|vue3.x手机端弹框组件

    基于Vue3.0开发的轻量级手机端弹框组件V3Popup. 之前有分享一个vue2.x移动端弹框组件,今天给大家带来的是Vue3实现自定义弹框组件. V3Popup 基于vue3.x实现的移动端弹出框 ...

  2. RN code push自定义弹框

    最近在弄react native的code push热更新问题.开始是用的后台默默更新配置.由于微软服务器速度问题,经常遇到用户一直在下载中问题.而用户也不知道代码需要更新才能使用新功能,影响了正常业 ...

  3. vue自定义弹框

    vue 全局自定义简单弹框 https://www.jianshu.com/p/1307329aa09e https://www.cnblogs.com/crazycode2/p/7907905.ht ...

  4. html自定义弹框

    一.要实现的功能 1.弹框弹出时有遮罩 2.弹框内的文字过多时右侧有滚动条 3.根据执行结果变更弹框title的样式   二.具体实现 思路:定义一个有宽高的div,默认隐藏,当要显示时,设置为dis ...

  5. artDialog自定义弹框

    弹框内容:<div class='boxy' style="display:none;" id="boxy"> //将div设置成隐藏效果 < ...

  6. android之自定义弹框

    step1 创建窗体 final AlertDialog dialog =new Builder(this).create(); step2 获取View View viewDialog =View. ...

  7. svelte组件:Svelte自定义弹窗Popup组件|svelte移动端弹框组件

    基于Svelte3.x自定义多功能svPopup弹出框组件(组件式+函数式) 前几天有分享一个svelte自定义tabbar+navbar组件,今天继续带来svelte自定义弹窗组件. svPopup ...

  8. 考拉Android统一弹框

    作者:钱成杰 背景 在快速开发的背景下,经历了n个版本后的考拉Android App中已经存在了各种各样看似相同却各有差别的弹框样式.其中包括系统弹框和自定义弹框,并且在线上时常会出现IllegalA ...

  9. layer弹框在实际项目中的一些应用

    官方介绍:layer至今仍作为layui的代表作,受众广泛并非偶然,而是这五年多的坚持,不断完善和维护.不断建设和提升社区服务,使得猿们纷纷自发传播,乃至于成为今天的Layui最强劲的源动力.目前,l ...

随机推荐

  1. php生成文字图片效果

    php生成文字图片效果最近看到php的GD功能,试着做了一个基本生成文字图片效果的代码: 显示文字图片页面:demo.php<?php$str = $_REQUEST['str'] ? $_RE ...

  2. bzoj2660最多的方案

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2660 当然可以看出  选了第 i 个斐波那契数<=>选了第 i - 1 和第 i ...

  3. SQL Server 查询优化器运行方式

    一.结合实际,谈索引使用的误区 理论的目的是应用.虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析.下面我们将根据在实践中遇到的实际问题 ...

  4. SpringCloud初体验:二、Config 统一配置管理中心

    Spring Cloud Config : 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. 配置中心也区分为服务端和客户端,本次体 ...

  5. mariadb master and salve configure

    mariadb master and salve configure 主从复制配置: master:192.168.8.200 salve:192.168.8.201 主服务器配置: 主服务器需要启动 ...

  6. 通过BeanFactoryPostProcessor来获取bean

    一.现在我们很多时候都在spring的容器中,进行bean的提取和操作,但是配置里面首先需要扫描相应的包来实现相关bean的注入 但是问题来了.如果我们在另外一个线程需要用的时候,并且没有配置扫描该类 ...

  7. 常见的加密和解密算法—DES

    一.DES加密概述 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并 ...

  8. uva-10879-因数分解

    把一个数分解成n*m的形式,一定存在 解题思路: 一个大于1的正整数最小因数一定是素数 ac时间80ms,感觉慢了,可惜看不到0ms的大神代码 #include <iostream> #i ...

  9. Robot Framework——百度搜索

     1.创建项目 选择菜单栏file----->new Project 右键点击新建Project,选择new Suite 选项. 右键点击新建测试Suite,选择new Test Case. 完 ...

  10. asp.net要验证的用户名和密码

    FormsAuthentication.Authenticate()方法要验证的用户名和密码必须存储在Web.config文件内.如果要验证存储在“ASP.NET成员资格数据库”中的密码,则需要调用M ...