MyAlertView.swift

// Pop Up Styles

enum MyAlertViewStyle: Int {

case success

case error

case notice

case warning

case info

}

// Allow alerts to be closed/renamed in a chainable manner

// Example: MyAlertView().showSuccess(self, title: "Test", subTitle: "Value").Close()

//class MyAlertViewClose {

//    let alertview: MyAlertView

//

//    // Initialisation and Title/Subtitle/Close functions

//    init(alertview: MyAlertView) { self.alertview = alertview }

//    func setTitle(_ title: String) { self.alertview.labelView.text = title; }

//    func setSubTitle(_ subTitle: String) { self.alertview.labelViewDescription.text = subTitle; }

//    func Close() { self.alertview.doneButtonAction() }

//}

class MyAlertView: UIView {

let kDefaultShadowOpacity: CGFloat = 0.7;

let kCircleHeight: CGFloat = 56.0;

let kCircleTopPosition: CGFloat = -12; // Should not be defined here. Make it dynamic

let kCircleBackgroundTopPosition: CGFloat = -15; // Should not be defined here. Make it dynamic

let kCircleHeightBackground: CGFloat = 62.0;

let kCircleIconHeight: CGFloat = 20.0;

let kWindowWidth: CGFloat = 240.0;

let kWindowHeight: CGFloat = 228.0;

// Font

let kDefaultFont: NSString = "HelveticaNeue"

// Members declaration

var labelView: UILabel

var labelViewDescription: UILabel

var shadowView: UIView

var contentView: UIView

var circleView: UIView

var circleViewBackground: UIView

var circleIconImageView: UIImageView

var doneButton: UIButton

var rootViewController: UIViewController

var durationTimer: Timer!

init () {

// Content View

self.contentView = UIView(frame: CGRect(x: 0, y: kCircleHeight / 4, width: kWindowWidth, height: kWindowHeight))

self.contentView.backgroundColor = UIColor(white: 1, alpha: 1);

self.contentView.layer.cornerRadius = 5;

self.contentView.layer.masksToBounds = true;

self.contentView.layer.borderWidth = 0.5;

// Circle View

self.circleView = UIView(frame: CGRect(x: kWindowWidth / 2 - kCircleHeight / 2, y: kCircleTopPosition, width: kCircleHeight, height: kCircleHeight))

self.circleView.layer.cornerRadius =  self.circleView.frame.size.height / 2;

// Circle View Background

self.circleViewBackground = UIView(frame: CGRect(x: kWindowWidth / 2 - kCircleHeightBackground / 2, y: kCircleBackgroundTopPosition, width: kCircleHeightBackground, height: kCircleHeightBackground))

self.circleViewBackground.layer.cornerRadius =  self.circleViewBackground.frame.size.height / 2;

self.circleViewBackground.backgroundColor = UIColor.white

// Circle View Image

self.circleIconImageView = UIImageView(frame: CGRect(x: kCircleHeight / 2 - kCircleIconHeight / 2, y: kCircleHeight / 2 - kCircleIconHeight / 2, width: kCircleIconHeight, height: kCircleIconHeight))

self.circleView.addSubview(self.circleIconImageView)

// Title

self.labelView = UILabel(frame: CGRect(x: 12, y: kCircleHeight / 2 + 22, width: kWindowWidth - 24, height: 40))

self.labelView.numberOfLines = 1

self.labelView.textAlignment = NSTextAlignment.center

self.labelView.font = UIFont(name: kDefaultFont as String, size: 20)

self.contentView.addSubview(self.labelView)

// Subtitle

self.labelViewDescription = UILabel(frame: CGRect(x: 12, y: 84, width: kWindowWidth - 24, height: 80))

self.labelViewDescription.numberOfLines = 3

self.labelViewDescription.textAlignment = NSTextAlignment.center

self.labelViewDescription.font = UIFont(name: kDefaultFont as String, size: 14)

self.contentView.addSubview(self.labelViewDescription)

// Shadow View

self.shadowView = UIView(frame: UIScreen.main.bounds)

self.shadowView.backgroundColor = UIColor.black

// Done Button

self.doneButton = UIButton(frame: CGRect(x: 12, y: kWindowHeight - 52, width: kWindowWidth - 24, height: 40))

self.doneButton.layer.cornerRadius = 3

self.doneButton.layer.masksToBounds = true

self.doneButton.setTitle("Done", for: UIControlState())

self.doneButton.titleLabel?.font = UIFont(name: kDefaultFont as String, size: 14)

self.contentView.addSubview(self.doneButton)

// Root view controller

self.rootViewController = UIViewController()

// Superclass initiation

super.init(frame: CGRect(x: ((320 - kWindowWidth) / 2), y: 0 - kWindowHeight, width: kWindowWidth, height: kWindowHeight))

// Show notice on screen

self.addSubview(self.contentView)

self.addSubview(self.circleViewBackground)

self.addSubview(self.circleView)

// Colours

self.contentView.backgroundColor = UIColorFromRGB(0xFFFFFF)

self.labelView.textColor = UIColorFromRGB(0x4D4D4D)

self.labelViewDescription.textColor = UIColorFromRGB(0x4D4D4D)

self.contentView.layer.borderColor = UIColorFromRGB(0xCCCCCC).cgColor

// On complete.

self.doneButton.addTarget(self, action: #selector(MyAlertView.doneButtonAction), for: UIControlEvents.touchUpInside)

}

required init?(coder aDecoder: NSCoder) {

fatalError("init(coder:) has not been implemented")

}

// showTitle(view, title, subTitle, style)

func showTitle(_ view: UIViewController, title: String, subTitle: String, style: MyAlertViewStyle)  {

return showTitle(view, title: title, subTitle: subTitle, completeText: nil, style: style)

}

// showSuccess(view, title, subTitle)

func showSuccess(_ view: UIViewController, title: String, subTitle: String)  {

return showTitle(view, title: title, subTitle: subTitle, completeText: nil, style: MyAlertViewStyle.success);

}

// showError(view, title, subTitle)

func showError(_ view: UIViewController, title: String, subTitle: String)  {

return showTitle(view, title: title, subTitle: subTitle, completeText: nil, style: MyAlertViewStyle.error);

}

// showNotice(view, title, subTitle)

func showNotice(_ view: UIViewController, title: String, subTitle: String)  {

return showTitle(view, title: title, subTitle: subTitle,  completeText: nil, style: MyAlertViewStyle.notice);

}

// showWarning(view, title, subTitle)

func showWarning(_ view: UIViewController, title: String, subTitle: String)  {

return showTitle(view, title: title, subTitle: subTitle, completeText: nil, style: MyAlertViewStyle.warning);

}

// showInfo(view, title, subTitle)

func showInfo(_ view: UIViewController, title: String, subTitle: String)  {

return showTitle(view, title: title, subTitle: subTitle, completeText: nil, style: MyAlertViewStyle.info);

}

// showTitle(view, title, subTitle, duration, style)

func showTitle(_ view:UIViewController, title: String, subTitle: String, completeText: String?, style: MyAlertViewStyle)  {

self.alpha = 0;

self.rootViewController = view

self.rootViewController.view.addSubview(self.shadowView)

self.rootViewController.view.addSubview(self)

// Complete text

if(completeText != nil) {

self.doneButton.setTitle(completeText, for: UIControlState())

}

// Alert colour/icon

var viewColor: UIColor = UIColor()

var iconImageName: NSString = ""

// Icon style

switch(style) {

case MyAlertViewStyle.success:

viewColor = UIColorFromRGB(0x22B573);

iconImageName = "notification-success"

case MyAlertViewStyle.error:

viewColor = UIColorFromRGB(0xC1272D);

iconImageName = "notification-error"

case MyAlertViewStyle.notice:

viewColor = UIColorFromRGB(0x727375)

iconImageName = "notification-notice"

case MyAlertViewStyle.warning:

viewColor = UIColorFromRGB(0xFFD110);

iconImageName = "notification-warning"

case MyAlertViewStyle.info:

viewColor = UIColorFromRGB(0x2866BF);

iconImageName = "notification-info"

}

// Title

if ((title as NSString).length > 0 ) {

self.labelView.text = title;

}

// Subtitle

if ((subTitle as NSString).length > 0) {

self.labelViewDescription.text = subTitle;

}

// Alert view colour and images

self.doneButton.backgroundColor = viewColor;

self.circleView.backgroundColor = viewColor;

self.circleIconImageView.image = UIImage(named: iconImageName as String)

// Animate in the alert view

UIView.animate(withDuration: 0.2, animations: {

self.shadowView.alpha = self.kDefaultShadowOpacity

var frame:CGRect = self.frame;

frame.origin.y = self.rootViewController.view.center.y - 100;

self.frame = frame;

self.alpha = 1;

}, completion: { finished in

UIView.animate(withDuration: 0.2, animations: {

self.center = self.rootViewController.view.center;

}, completion: { finished in })

})

}

// When click 'Done' button, hide view.

func doneButtonAction() { hideView(); }

//Close MyAlertView By duration

func hideMyAlertView(duration: TimeInterval?)  {

// Adding duration

if (duration != nil) {

durationTimer?.invalidate()

durationTimer = Timer.scheduledTimer(timeInterval: duration!, target: self, selector: #selector(MyAlertView.hideView), userInfo: nil, repeats: false)

}

}

// Close MyAlertView

func hideView() {

UIView.animate(withDuration: 0.2, animations: {

self.shadowView.alpha = 0;

self.alpha = 0;

}, completion: { finished in

self.shadowView.removeFromSuperview()

self.removeFromSuperview()

})

}

// Helper function to convert from RGB to UIColor

func UIColorFromRGB(_ rgbValue: UInt) -> UIColor {

return UIColor(

red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,

green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,

blue: CGFloat(rgbValue & 0x0000FF) / 255.0,

alpha: CGFloat(1.0)

)

}

}

ViewController.swift

import UIKit

let kSuccessTitle: NSString = "Congratulations"

let kErrorTitle: NSString = "Connection error"

let kNoticeTitle: NSString = "Notice"

let kWarningTitle: NSString = "Warning"

let kInfoTitle: NSString = "Info"

let kSubtitle: NSString = "You've just displayed this awesome Pop Up View"

let kDefaultAnimationDuration = 2.0

class ViewController: UIViewController {

let alertView = MyAlertView()

override func viewDidLoad() {

super.viewDidLoad()

}

@IBAction func success(_ sender: Any) {

alertView.showSuccess(self, title: kSuccessTitle as String, subTitle: kSubtitle as String)

alertView.hideMyAlertView(duration: 1.0)

}

@IBAction func error(_ sender: Any) {

alertView.showError(self, title: kErrorTitle as String, subTitle: kSubtitle as String)

alertView.hideMyAlertView(duration: 2.0)

}

@IBAction func notice(_ sender: Any) {

alertView.showNotice(self, title: kNoticeTitle as String, subTitle: kSubtitle as String)

alertView.hideMyAlertView(duration: 3.0)

}

@IBAction func warning(_ sender: Any) {

alertView.showWarning(self, title: kWarningTitle as String, subTitle: kSubtitle as String)

alertView.hideMyAlertView(duration: 4.0)

}

@IBAction func info(_ sender: Any) {

alertView.showInfo(self, title: kInfoTitle as String, subTitle: kSubtitle as String)

alertView.hideMyAlertView(duration: 5.0)

}

}

效果图如下:

自定义AlertView(Swift)的更多相关文章

  1. Swift自定义AlertView

    今天项目加新需求,添加积分过期提醒功能: 第一反应就用系统的UIAlertViewController,但是message中积分是需要红色显示. // let str = "尊敬的顾客,您有 ...

  2. iOS 第三方自定义Alertview项目MBProcessHud中的重要代码分析

    做ios,弹出一个自定义的alertview挺常见的.ios7以前,我们可以对系统的UIAlertView进行一点操作,实现一点简单的定制,但是ios7不再允许我们这样做了.因此,我们需要自己创建一个 ...

  3. 兼容iOs7的自定义alertView

    转载请注明出处. 升级到ios7后,旧项目中使用的继承UIAlertView的自定义alertview无法正常显示了,无奈只好换思路去实现,改成从当前keywindow下创建要显示的alertview ...

  4. 自定义AlertView的方法和改变Alert的弹出位置以及其宽度

    此方法在IOS7中不适合 一.自定义AlertView 1.首先新建一个OC类继承与AlertView. 2.然后再.m中添加方法 - (void)layoutSubviews 可以再这个方法里边改变 ...

  5. iOS开发——自定义AlertView

    自定义的AlertView,可以选择出现的动画方式,正文信息高度自动变化,特意做了几个可以对比.没啥难点,直接上代码,一看就懂. 1.在YYTAlertView.h文件中 // //  YYTAler ...

  6. 自定义AlertView实现模态对话框

    在Windows应用程序中,经常使用模态(Model)对话框来和用户进行简单的交互,比如登录框.在IOS应用程序中,有时我们也希望做同样的事情.但IOS的UI库中,没有模态对话框,最接近那个样子的应该 ...

  7. IOS自定义alertview

    在家闲来无事,于是就看起来ios绘图的那块,写点什么好呢? 鼓捣了一会,总算写出了一个小东西 这个是写完以后的效果 这里我实现了三种款式的alertview 分别是成功,错误和警告,剩下的呢有空继续添 ...

  8. iOS自定义AlertView 与 ActionSheet 遮罩提示+弹出动画

    产品大人总是能够想到很多让人欣慰的点子,基本所有能提示的地方都要很多文案啊图片之类 由此封装了一个半透明黑色遮罩的alert类(假装有图.jpg) 代码略糙,just share (逃 下载链接

  9. Swift之高德地图自定义标注弹出气泡样式

    在用到地图类的sdk,sdk自带的样式必定不能满足开发者的需求,于是开发者不得不进行自定义,由于官方同样是object-c 版语法,不得不将其转为swift语法,以满足项目需求. 新建两个类 Cust ...

随机推荐

  1. JavaScript_6_函数

    函数是由事件驱动的或者当它被调用执行的可重复使用的代码块 调用带参数的函数 带有返回值的函数 <!DOCTYPE html> <html> <head> <t ...

  2. 洛谷 P1057 传球游戏

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...

  3. python基础教程总结9——模块,包,标准库

    1. 模块 在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用. 1.1 模块搜索路径 导入模块时,是按照sys ...

  4. [学习笔记]Linux下mysql的基础操作

    命令 #查看版本 mysql --version   #进入mysql 命令 mysql -u root -p mysql -u root@localhost (没有密码的情况)   #创建数据库 c ...

  5. Vue中使用computed与watch结合实现数据变化监听

    目的:当数据变化时,为其中重要数据增加边框,实现闪烁以达到提醒目的.数据格式如下,只有在未处理火警/故障时增加闪烁边框.可以使用watch进行深度监听.数据格式已定,也非常明确要监听的数据是有两个.既 ...

  6. Linux curl 详解

    Linux下载工具Curl也是Linux下不错的命令行下载工具,小巧.高速,唯一的缺点是不支持多线程下载.以下是他的安装和功能. 安装 $ tar zxvf curl-7.14.0.tar.gz $ ...

  7. lua调用java过程

    在cocos2dx框架中,有继承好的luaj文件来方便我们去使用lua调用java底层代码,注意:luaj只能使用在安卓平台下,如果在平台下使用,会出错, 所以使用前需要加平台判断,方法 如下: lo ...

  8. Unity学习之路——主要类

    学习https://blog.csdn.net/VRunSoftYanlz/article/details/78881752 1.Component类gameObject:组件附加的游戏对象.组件总是 ...

  9. mysql的字符串连接符

    以前用SQL Server 连接字符串是用“+”,现在数据库用mysql,写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作 ...

  10. memcache 协议 && Golang实现

    https://github.com/quguolin/memcache 一:Error ERROR\r\n 客户端发送了一个不存在的命令 CLIENT_ERROR\r\n 客户端发送了一个不符合协议 ...