美文网首页
iOS常用宏定义及工具类

iOS常用宏定义及工具类

作者: CombatReadiness | 来源:发表于2021-06-29 11:48 被阅读0次

下面列些自己常用的宏定义

//
//  Macro.h
//  HKBaseClasses
//
//  Created by hooyking on 2020/4/26.
//  Copyright © 2020 hooyking. All rights reserved.
//

#ifndef Macro_h
#define Macro_h

#define kScreenW                        [[UIScreen mainScreen] bounds].size.width
#define kScreenH                        [[UIScreen mainScreen] bounds].size.height
#define kAutoW(a)                       kScreenW/((UIInterfaceOrientationIsPortrait(kAppInterfaceOrientation)) ? 375.0 : 667.0)*a
#define kAutoH(b)                       kScreenH/((UIInterfaceOrientationIsPortrait(kAppInterfaceOrientation)) ? 667.0 : 375.0)*b
#define kTabBarH                        self.tabBarController.tabBar.frame.size.height
#define kNavConH                        self.navigationController.navigationBar.frame.size.height

#define kStatusBarH \
\
^(){ \
    CGFloat statusBarH = 0; \
    if (@available(iOS 13.0, *)) { \
        UIWindowScene *windowScene = (UIWindowScene *)[UIApplication sharedApplication].connectedScenes.allObjects.firstObject; \
        statusBarH = windowScene.statusBarManager.statusBarFrame.size.height; \
    } else { \
       statusBarH = [[UIApplication sharedApplication] statusBarFrame].size.height; \
    } \
    return statusBarH; \
}()

#define kAppWindow \
\
^(){ \
    UIWindow *window = [UIApplication sharedApplication].delegate.window; \
    if (!window) { \
        if (@available(iOS 13.0, *)) { \
            NSArray *array =[[[UIApplication sharedApplication] connectedScenes] allObjects]; \
            UIWindowScene *windowScene = (UIWindowScene*)array[0]; \
            UIWindow *mainWindow = [windowScene valueForKeyPath:@"delegate.window"]; \
            if(mainWindow) { \
                window = mainWindow; \
            } else { \
                window = [UIApplication sharedApplication].windows.lastObject; \
            } \
        } else { \
            window = [UIApplication sharedApplication].keyWindow; \
        } \
    } \
    return window; \
}()

//屏幕方向
#define kAppInterfaceOrientation \
\
^(){ \
    UIInterfaceOrientation interfaceOrientation; \
    if (@available(iOS 13.0, *)) { \
        UIWindowScene *windowScene = (UIWindowScene *)[UIApplication sharedApplication].connectedScenes.allObjects.firstObject; \
        interfaceOrientation = windowScene.interfaceOrientation; \
    } else { \
        interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation; \
    } \
    return interfaceOrientation; \
}()

#define kSecurityH                      (kSafeAreaSeries ? (UIInterfaceOrientationIsPortrait(kAppInterfaceOrientation) ? 34.0 : 21.0) : 0)//底部安全高度

#define kSafeAreaSeries \
\
^(){ \
    if (@available(iOS 11.0, *)) { \
        CGFloat bottomSafeInset = kAppWindow.safeAreaInsets.bottom; \
        if (bottomSafeInset == 34.0 || bottomSafeInset == 21.0) { \
            return YES; \
        } \
    } \
    return NO; \
}()

#define kBelowIPhone5Series             ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(640,1136), [[UIScreen mainScreen] currentMode].size) || CGSizeEqualToSize(CGSizeMake(640,960), [[UIScreen mainScreen] currentMode].size)) : NO)
#define kIPhone4Series                  ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(640,960), [[UIScreen mainScreen] currentMode].size)) : NO)
#define kIPhone5Series                  ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(640,1136), [[UIScreen mainScreen] currentMode].size)) : NO)
#define kIPhone6Series                  ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(750,1334), [[UIScreen mainScreen] currentMode].size)) : NO)

#define kRGBColorAlpha(a,b,c,d)         [UIColor colorWithRed:a/255.0 green:b/255.0 blue:c/255.0 alpha:d]
#define kRGBColor(a,b,c)                kRGBColorAlpha(a,b,c,1.0)
//16位颜色值,使用方式:UIColorFromHexString(0xffffff)
#define kUIColorFromHexString(hexValue)       [UIColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue &0xFF00) >>8))/255.0 blue:((float)(hexValue &0xFF))/255.0 alpha:1.0]
#define kRandomColor                    kRGBColor(arc4random() % 256, arc4random() % 256, arc4random() % 256)  //随机色
//UIColor转UIImage
#define kCreateImageForColor(color) \
\
^(){ \
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); \
    UIGraphicsBeginImageContext(rect.size); \
    CGContextRef context = UIGraphicsGetCurrentContext(); \
    CGContextSetFillColorWithColor(context, [color CGColor]); \
    CGContextFillRect(context, rect); \
    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext(); \
    UIGraphicsEndImageContext(); \
    return theImage; \
}()

//字号
#define kFontWeight(size,fontWeight) \
\
^(){ \
    CGFloat fontSize = size; \
    if (kBelowIPhone5Series) { \
        fontSize --; \
    } else { \
        fontSize = size; \
    } \
    return [UIFont systemFontOfSize:fontSize weight:fontWeight]; \
}()

#define kFontSize(size) \
\
^(){ \
    CGFloat fontSize = size; \
    if (kBelowIPhone5Series) { \
        fontSize --; \
    } else { \
        fontSize = size; \
    } \
    return fontSize; \
}()

#define kFontHeavy(size)                kFontWeight(size,UIFontWeightHeavy)
#define kFontBold(size)                 kFontWeight(size,UIFontWeightBold)
#define kFontRegular(size)              kFontWeight(size,UIFontWeightRegular)
#define kFontMedium(size)               kFontWeight(size,UIFontWeightMedium)
#define kFontThin(size)                 kFontWeight(size,UIFontWeightThin)

//拼接字符串
#define kNSStringFormat(format,...)     [NSString stringWithFormat:format,##__VA_ARGS__]
//检测是否含有目标子串
#define kHasString(string,subString)    ([string rangeOfString:subString].location != NSNotFound)

#ifdef DEBUG
#define HKLog(...)                      printf("[%s] %s [第%d行]: %s\n", __TIME__ ,__PRETTY_FUNCTION__ ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String])
#else
#define HKLog(...)
#endif

//强弱引用
#define kWeakSelf(type)                 __weak typeof(type) weak##type = type;
#define kStrongSelf(type)               __strong typeof(type) type = weak##type;

//当前系统版本
#define kCurrentSystemVersion           [[UIDevice currentDevice].systemVersion doubleValue]
//当前语言
#define kCurrentSystemLanguage          [[NSLocale preferredLanguages] objectAtIndex:0]
//app版本
#define kCurrentAppVersion              [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]
//app名称
#define kCurrentAppName                 [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]

//沙盒目录路径
#define kHomePath                       NSHomeDirectory()
#define kTemPath                        NSTemporaryDirectory()
#define kCachePath                      NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject
#define kLibraryPath                    NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject
#define kDocumentPath                   NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject

//判断是否为iPhone
#define IS_IPHONE                       ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"])
//判断是否为iPad
#define IS_IPAD                         ([[[UIDevice currentDevice] model] isEqualToString:@"iPad"])
//判断是否为iPod
#define IS_IPOD                         ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])

//打印方法运行时间
#define METHOD_TIME_BEGIN               NSDate * startTime = [NSDate date];
#define METHOD_TIME_END                 HKLog(@"time interval: %f", -[startTime timeIntervalSinceNow]);

//监听通知
#define kNotifyAdd(noParamsFunc, notifyName)  [[NSNotificationCenter defaultCenter] \
addObserver:self \
selector:@selector(noParamsFunc) \
name:notifyName \
object:nil];
//发送通知
#define kNotifyPost(notifyName,obj)     [[NSNotificationCenter defaultCenter] postNotificationName:notifyName object:obj];
//移除通知
#define kNotifyRemove(notifyName)       [[NSNotificationCenter defaultCenter] removeObserver:self name:notifyName object:nil];

#endif /* Macro_h */

再附上平时自己稍微整理用得上的工具类BaseClasses;

相关文章

  • iOS开发常用的工具类和宏定义

    iOS开发常用的工具类和宏定义 开发总结的工具类和宏 https://github.com/xiaoChen66...

  • iOS常用宏定义及工具类

    下面列些自己常用的宏定义 再附上平时自己稍微整理用得上的工具类BaseClasses[https://github...

  • IOS宏定义工具类-常用

  • iOS常用宏定义

    打印日志的几种写法 推荐文章iOS 日常工作之常用宏定义大全iOS常用宏定义 结束语 到这里就结束了,如若不懂的话...

  • iOS | iOS宏定义的使用与规范

    宏定义在很多方面都会使用,例如定义高度、判断iOS系统、工具类,还有诸如文件路径、服务端api接口文档。为了对宏能...

  • iOS开发宏定义规范

    宏定义在很多方面都会使用,例如定义高度、判断iOS系统、工具类,还有诸如文件路径、服务端api接口文档。为了对宏能...

  • iOS-常用宏定义

    [转自:iOS常用宏定义][http://www.cocoachina.com/ios/20161207/1831...

  • [转]iOS宏定义的使用与规范

    转载自:这里 #######宏定义在很多方面都会使用,例如定义高度、判断iOS系统、工具类,还有诸如文件路径、服务...

  • iOS 常用宏定义

    iOS 开发中使用一些常用宏定义可以大大提高开发效率,提高代码的重用性.以下是一些常用的宏定义: 像这些宏定义,在...

  • ios开发 -宏定义

    宏定义在很多方面都会使用,例如定义高度、判断iOS系统、工具类,还有诸如文件路径、服务端api接口文档。 ...

网友评论

      本文标题:iOS常用宏定义及工具类

      本文链接:https://www.haomeiwen.com/subject/hpwhultx.html