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. 转载 - 浅析我曾遇到的几个便宜VPS服务器

    本文来自:http://www.jianshu.com/p/7d8cfa87fa32 有些时候可能并不是我们工作和业务的需要,但是网上就是这么的邪门,如果看到便宜的衣服不去购买深怕自己吃亏.所以每年的 ...

  2. Windows服务管理

    按键:win+R 输入:services.msc “服务和应用程序”界面选项打开 * sc命令的使用:create(创建) delete(删除)等 * service可执行文件路径的修改:win+R ...

  3. 用NPOI操作EXCEL-锁定列CreateFreezePane()

    public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...

  4. Android(java)学习笔记122:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)

    之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播: 1. 我们首先了解一下有序广播和无序广播区别和联系? (1)有序广播> 接受者有优先级, ...

  5. MHA

    MHA 1. MHA简介 1.1 MHA工作原理总结为如下 1.2 MHA工具包介绍 2. 部署MHA 2.1 环境介绍 2.2 一主两从复制搭建 2.3 配置互信 2.4 下载MHA 2.5 安装M ...

  6. spring bean的介绍以及xml和注解的配置方法

    5.Bean 下边我们来了解一下Bean的: Bean的作用域Bean的生命周期Bean的自动装配Resources和ResourceLoader 5.1Bean容器的初始化 Bean容器的初始化 两 ...

  7. Linux 用户管理(三)

    一.userdel --delete a user account and related files -r  --remove 删除用户及家目录 二.id --print real and effe ...

  8. 【android】【android studio】修改emulator的本地化环境

    Changing the emulator locale from the adb shell To change the locale in the emulator by using the ad ...

  9. Goroutine 中执行匿名函数 坑

    //相对应for 循环 goroutine跑到慢 所以这里很大概率只会打印最后一条数据 func goRun() { values := []int{1, 2, 3} for _, v := rang ...

  10. Python基础——字典(dict)

    由键-值对构建的集合. 创建 dic1={} type(dic1) dic2=dict() type(dic2) 初始化 dic2={'hello':123,'world':456,'python': ...