• 自定义AlertView(Swift)


    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, 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, 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, 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, kCircleIconHeight, height: kCircleIconHeight))

            self.circleView.addSubview(self.circleIconImageView)

            

            // Title

            self.labelView = UILabel(frame: CGRect(x: 12, y: kCircleHeight / 2 + 22, 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, 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, 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, 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)

        }

    }

    效果图如下:

  • 相关阅读:
    【CSS】4种CSS方法设置元素垂直水平居中
    js数据类型:引用和5种基本数据类型
    iOS——CALayer的shadow无效问题
    iOS——自定义Segue实现总结
    iOS动画
    iOS——Command-Line 查看当前SDK版本并修改默认SDK版本
    iOS——Swift开发中的单例设计模式(摘译,非原创)
    Windows Phone 8 解锁提示IpOverUsbSvc问题——IpOverUsbEnum返回No connected partners found解决方案
    Windows 8.1 开发过程中遇到的小问题(2)
    Windows 8.1 开发过程中遇到的小问题
  • 原文地址:https://www.cnblogs.com/ming1025/p/6149444.html
Copyright © 2020-2023  润新知