我在哪里将常用实用程序功能放在iOS 8 + Swift中

时间:2014-12-13 18:15:46

标签: ios swift ios8 xcode6

我有以下方法(例如),我希望能够在iOS + Swift项目中的任何ViewController中使用它:

func initializeBlurEffectOnGivenUIView(UIViewToBeBlurred: UIView) {

    let UIViewToBeBlurredHeight = UIViewToBeBlurred.frame.size.height
    let UIViewToBeBlurredWidth = UIViewToBeBlurred.frame.size.width
    let UIViewToBeBlurredX = UIViewToBeBlurred.frame.origin.x
    let UIViewToBeBlurredY = UIViewToBeBlurred.frame.origin.y

    let blurEffect:UIBlurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
    let vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect)

    let vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect)
    let blurEffectView:UIVisualEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = CGRectMake(UIViewToBeBlurredX, UIViewToBeBlurredY, UIViewToBeBlurredWidth, UIViewToBeBlurredHeight)
    blurEffectView.contentView.addSubview(vibrancyEffectView)

    UIViewToBeBlurred.addSubview(blurEffectView)
}

我有更常见的助手,比如那里我也想提供。如何构建应用程序以实现此目的?

4 个答案:

答案 0 :(得分:18)

如果该函数是自由全局函数,请将该函数放在任何文件的顶层。 (只是不要不小心重复自己,并在所有文件的顶层放置相同的功能。)例如,这就是我对我在这里描述的delay效用函数的处理方式:dispatch_after - GCD in swift? < / p>

但是,在您给出的示例的特定情况下,我可能会将其放在UIView的扩展中。我将其重写为实例方法,因此我们不是模糊另一个视图,而是从现有视图开始并模糊self

答案 1 :(得分:7)

使用扩展程序,如下所示:

extension UIView {
    func initializeBlurEffect() {

        let height = self.frame.size.height
        let width = self.frame.size.width
        let x = self.frame.origin.x
        let y = self.frame.origin.y

        let blurEffect:UIBlurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
        let vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect)

        let vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect)
        let blurEffectView:UIVisualEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = CGRectMake(x, y, width, height)
        blurEffectView.contentView.addSubview(vibrancyEffectView)

        self.addSubview(blurEffectView)
    }
}

然后这样称呼:

myview.initializeBlurEffect()

答案 2 :(得分:2)

如果你想全局访问这个功能,你可以把它放在任何文件之上,或者系统地创建一个普通的swift文件并将其添加到那里。

OR 如果你想在UIViews或viewcontroller中访问它,你可以创建uiview的扩展(由@Mike建议)

答案 3 :(得分:0)

您可以为此创建公共类,如下所示:

class Utils {

//MARK:- STRING FROM DICT
func getStringFromDictionary(dict:Any) -> String{
    var strJson = ""
    do {
        let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions.prettyPrinted)
        strJson = String(data: data, encoding: String.Encoding.utf8)!
    } catch let error as NSError {
        print("json error: \(error.localizedDescription)")
    }

    return strJson
}



//MARK:- ALERT
func showAlertWithTitleFromVC(vc:UIViewController, title:String, andMessage message:String, buttons:[String], completion:((_ index:Int) -> Void)!) -> Void {

    let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
    for index in 0..<buttons.count  {

        //      alertController.setValue(NSAttributedString(string: title, attributes: [NSFontAttributeName : UIFont.appFont_OpenSans_Regular(fontSize: 15),NSForegroundColorAttributeName : BLACK_COLOR]), forKey: "attributedTitle")
        //
        //      alertController.setValue(NSAttributedString(string: message, attributes: [NSFontAttributeName : UIFont.appFont_OpenSans_Regular(fontSize: 13),NSForegroundColorAttributeName : APP_COLOR_BLUE_1]), forKey: "attributedMessage")


        let action = UIAlertAction(title: buttons[index], style: .default, handler: {
            (alert: UIAlertAction!) in
            if(completion != nil){
                completion(index)
            }
        })

        //      action.setValue(APP_COLOR_BLUE_2, forKey: "titleTextColor")
        alertController.addAction(action)
    }
    vc.present(alertController, animated: true, completion: nil)
}


//MARK:- ACTION SHEET
func showActionSheetWithTitleFromVC(vc:UIViewController, title:String, andMessage message:String, buttons:[String],canCancel:Bool, completion:((_ index:Int) -> Void)!) -> Void {

    let alertController = UIAlertController(title: title, message: message, preferredStyle: .actionSheet)

    alertController.setValue(NSAttributedString(string: title, attributes: [NSFontAttributeName : UIFont.appFont_OpenSans_Regular(fontSize: 15),NSForegroundColorAttributeName : BLACK_COLOR]), forKey: "attributedTitle")
    alertController.setValue(NSAttributedString(string: message, attributes: [NSFontAttributeName : UIFont.appFont_OpenSans_Regular(fontSize: 13),NSForegroundColorAttributeName : APP_COLOR_BLUE_1]), forKey: "attributedMessage")


    for index in 0..<buttons.count  {

        let action = UIAlertAction(title: buttons[index], style: .default, handler: {
            (alert: UIAlertAction!) in
            if(completion != nil){
                completion(index)
            }
        })

        action.setValue(APP_COLOR_BLUE_2, forKey: "titleTextColor")
        alertController.addAction(action)
    }

    if(canCancel){
        let action = UIAlertAction(title: "Cancel", style: .cancel, handler: {
            (alert: UIAlertAction!) in
            if(completion != nil){
                completion(buttons.count)
            }
        })
        action.setValue(APP_COLOR_BLUE_2, forKey: "titleTextColor")
        alertController.addAction(action)
    }

    vc.present(alertController, animated: true, completion: nil)
}

//MARK:- INTERNET CHECK
func IS_INTERNET_AVAILABLE() -> Bool{

    return AIReachabilityManager.shared.isInternetAvailableForAllNetworks()
}


let INTERNET_MESSAGE:String = "Oops! It seems that you're not connected to the Internet, connect and try again"//"No internet connection, Please try later"
func SHOW_INTERNET_ALERT(){
    showAlertWithTitleFromVC(vc: (appDelegate.window?.rootViewController)!, title: APP_NAME, andMessage: INTERNET_MESSAGE, buttons: ["Dismiss"]) { (index) in
    }
}



//MARK:- CUSTOM LOADER

func SHOW_CUSTOM_LOADER(){
    SHOW_CUSTOM_LOADER_WITH_TEXT(text: "")
}

func SHOW_CUSTOM_LOADER_WITH_TEXT(text:String){

    SVProgressHUD.setDefaultStyle(.custom)
    SVProgressHUD.setDefaultMaskType(.custom)
    SVProgressHUD.setDefaultAnimationType(.flat)

    SVProgressHUD.setBackgroundColor(UIColor.clear)
    SVProgressHUD.setRingRadius(30)
    SVProgressHUD.setRingThickness(5)
    SVProgressHUD.setForegroundColor(WHITE_COLOR)

    if(text.characters.count > 0){
        SVProgressHUD.show(withStatus: text)
    }else{
        SVProgressHUD.show()
    }
}

func HIDE_CUSTOM_LOADER(){
    SVProgressHUD.dismiss()
}

//MARK:- USER DEFAULTS

func setUserDefaultsFor(object:AnyObject, with key:String) {
    UserDefaults.standard.set(object, forKey: key)
    UserDefaults.standard.synchronize()
}

func getUserDefaultsForKey(key:String) -> AnyObject? {
    return UserDefaults.standard.object(forKey: key) as AnyObject?
}

func removeUserDefaultsFor(key:String) {
    UserDefaults.standard.removeObject(forKey: key)
    UserDefaults.standard.synchronize()
}



//MARK:- PROPORTIONAL SIZE
let SCREEN_HEIGHT = UIScreen.main.bounds.size.height
let SCREEN_WIDTH = UIScreen.main.bounds.size.width

func GET_PROPORTIONAL_WIDTH (width:CGFloat) -> CGFloat {
    return ((SCREEN_WIDTH * width)/750)
}
func GET_PROPORTIONAL_HEIGHT (height:CGFloat) -> CGFloat {
    return ((SCREEN_HEIGHT * height)/1334)
}



//MARK:- NETWORK ACTIVITY INDICATOR

func SHOW_NETWORK_ACTIVITY_INDICATOR(){
    UIApplication.shared.isNetworkActivityIndicatorVisible =  true
}

func HIDE_NETWORK_ACTIVITY_INDICATOR(){
    UIApplication.shared.isNetworkActivityIndicatorVisible =  false
}


//Check IsiPhone Device
func IS_IPHONE_DEVICE()->Bool{
    let deviceType = UIDevice.current.userInterfaceIdiom == .phone
    return deviceType
}

//Check IsiPad Device
func IS_IPAD_DEVICE()->Bool{
    let deviceType = UIDevice.current.userInterfaceIdiom == .pad
    return deviceType
}

//iPhone 4 OR 4S
func IS_IPHONE_4_OR_4S()->Bool{
    let SCREEN_HEIGHT_TO_CHECK_AGAINST:CGFloat = 480
    var device:Bool = false

    if(SCREEN_HEIGHT_TO_CHECK_AGAINST == SCREEN_HEIGHT) {
        device = true
    }
    return device
}

func proportionalFontSize() -> CGFloat {

    var sizeToCheckAgainst = self

    if(IS_IPAD_DEVICE())    {
        sizeToCheckAgainst += 12
    }
    else {
        if(IS_IPHONE_6P_OR_6SP()) {
            sizeToCheckAgainst += 1
        }
        else if(IS_IPHONE_6_OR_6S()) {
            sizeToCheckAgainst += 0
        }
        else if(IS_IPHONE_5_OR_5S()) {
            sizeToCheckAgainst -= 1
        }
        else if(IS_IPHONE_4_OR_4S()) {
            sizeToCheckAgainst -= 2
        }
    }
    return sizeToCheckAgainst
}

//iPhone 5 OR OR 5C OR 4S
func IS_IPHONE_5_OR_5S()->Bool{
    let SCREEN_HEIGHT_TO_CHECK_AGAINST:CGFloat = 568
    var device:Bool = false
    if(SCREEN_HEIGHT_TO_CHECK_AGAINST == SCREEN_HEIGHT) {
        device = true
    }
    return device
}

//iPhone 6 OR 6S
func IS_IPHONE_6_OR_6S()->Bool{
    let SCREEN_HEIGHT_TO_CHECK_AGAINST:CGFloat = 667
    var device:Bool = false

    if(SCREEN_HEIGHT_TO_CHECK_AGAINST == SCREEN_HEIGHT) {
        device = true
    }
    return device
}

//iPhone 6Plus OR 6SPlus
func IS_IPHONE_6P_OR_6SP()->Bool{
    let SCREEN_HEIGHT_TO_CHECK_AGAINST:CGFloat = 736
    var device:Bool = false

    if(SCREEN_HEIGHT_TO_CHECK_AGAINST == SCREEN_HEIGHT) {
        device = true
    }
    return device
}

//MARK:- DEVICE ORIENTATION CHECK
func IS_DEVICE_PORTRAIT() -> Bool {
    return UIDevice.current.orientation.isPortrait
}

func IS_DEVICE_LANDSCAPE() -> Bool {
    return UIDevice.current.orientation.isLandscape
}


//MARK:- SYSTEM VERSION CHECK
func SYSTEM_VERSION_EQUAL_TO(version: String) -> Bool {
    return UIDevice.current.systemVersion.compare(version,
                                                  options: NSString.CompareOptions.numeric) == ComparisonResult.orderedSame
}

func SYSTEM_VERSION_GREATER_THAN(version: String) -> Bool {
    return UIDevice.current.systemVersion.compare(version,
                                                  options: NSString.CompareOptions.numeric) == ComparisonResult.orderedDescending
}

func SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(version: String) -> Bool {
    return UIDevice.current.systemVersion.compare(version,
                                                  options: NSString.CompareOptions.numeric) != ComparisonResult.orderedAscending
}

func SYSTEM_VERSION_LESS_THAN(version: String) -> Bool {
    return UIDevice.current.systemVersion.compare(version,
                                                  options: NSString.CompareOptions.numeric) == ComparisonResult.orderedAscending
}

func SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(version: String) -> Bool {
    return UIDevice.current.systemVersion.compare(version,
                                                  options: NSString.CompareOptions.numeric) != ComparisonResult.orderedDescending
}

}