iOS 常用工具函数

系统相关

系统相关

系统版本

[[[UIDevice currentDevice] systemVersion] floatValue] > 6.0;
// 或者
// 推荐使用这种方法,准确
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
// 系统版本为 9.0 及以上
#ifdef __IPHONE_9_0

新特性

// 是否支持 arc
#if __has_feature(objc_arc)

是否在前台

// 这是在前台
// UIApplicationStateBackground 这是在后台
// 对应的广播为 UIApplicationWillEnterForegroundNotification
[UIApplication sharedApplication].applicationState == UIApplicationStateActive;

判断类是否存在

  • 方法一:
Class target = NSClassFromString(@"NSString");
if (target) {
    // do something
} else {
    // do something
}
  • 方法二:
if([Class class]) {
    // Exists. Do something
} else {
    // Not exists. Do something
}

判断接口是否存在

cocoa 函数

  • 方法一:
[instance respondsToSelector:@selector(selector)];
  • 方法二:
[Class instancesRespondToSelector:@selector(selector)];

其他

C 函数

if (function != NULL) {
    // function exists. Do something
} else {
    // function not exists. Do something
}

OC 基础数据类型判断

strcmp([obj objCType], @encode(double)) == 0;
strcmp([obj objCType], @encode(unsigned long long)) == 0

// 首先将基础类型转换为 id。系统会自动生成对应的 NSNumber
int a = 100;
id judge = @(a);
if (strcmp([judge objCType], @encode(int)) == 0) {
    NSLoge(@"type = int");
}

UI

Window

获取主 Window

NSEnumerator *frontToBackWindows = [UIApplication.sharedApplication.windows reverseObjectEnumerator];
for (UIWindow *window in frontToBackWindows) {
    BOOL windowOnMainScreen = window.screen == UIScreen.mainScreen;
    BOOL windowIsVisible = !window.hidden && window.alpha > 0;
    BOOL windowLevelSupported = (window.windowLevel >= UIWindowLevelNormal && window.windowLevel <= self.maxSupportedWindowLevel);
    BOOL windowKeyWindow = window.isKeyWindow;

    if(windowOnMainScreen && windowIsVisible && windowLevelSupported && windowKeyWindow) {
        return window;
    }
}

View 及其子类相关

判断是否点击到某个 subView

- (void)viewDidLoad {
    [self.view addSubview:_testView];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    CGPoint point = [[touches anyObject] locationInView:self.view];
    if ([_testView.layer.presentationLayer hitTest:point]) {
        _testView.backgroundColor = [UIColor colorWithRed:(arc4random()%255)/255.0 green:(arc4random()%255)/255.0 blue:(arc4random()%255)/255.0 alpha:1];
    } else {
        [CATransaction begin];
        [CATransaction setAnimationDuration:10.0];
        _testView.center = point;
        [CATransaction commit];
    }
}

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值