/* * Copyright [2019] [Doric.Pub] * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // // DoricUtil.m // Doric // // Created by pengfei.zhou on 2019/7/26. // #import "DoricUtil.h" #import "DoricContext.h" #import "UIView+Doric.h" void DoricLog(NSString *_Nonnull format, ...) { va_list args; va_start(args, format); NSLogv([NSString stringWithFormat:@"Doric:%@", format], args); va_end(args); } UIColor *DoricColor(NSNumber *number) { CGFloat r, g, b, a; long colorValue = [number longValue]; a = ((colorValue >> 24) & 0xff) / 255.0f; r = ((colorValue >> 16) & 0xff) / 255.0f; g = ((colorValue >> 8) & 0xff) / 255.0f; b = ((colorValue >> 0) & 0xff) / 255.0f; return [UIColor colorWithRed:r green:g blue:b alpha:a]; } NSNumber *DoricColorToNumber(UIColor *color) { CGFloat r, g, b, a; [color getRed:&r green:&g blue:&b alpha:&a]; return @((((long) (a * 225) & 0xff) << 24) | (((long) (r * 225) & 0xff) << 16) | (((long) (g * 225) & 0xff) << 8) | (((long) (b * 225) & 0xff) << 0)); } NSBundle *DoricBundle() { NSBundle *bundle = [NSBundle bundleForClass:[DoricContext class]]; NSURL *url = [bundle URLForResource:@"Doric" withExtension:@"bundle"]; return [NSBundle bundleWithURL:url]; } void ShowToast(NSString *text, DoricGravity gravity) { UIView *superView = [UIApplication sharedApplication].windows.lastObject; UILabel *label = [[UILabel alloc] init]; label.font = [UIFont systemFontOfSize:20.f]; label.text = text; label.textAlignment = NSTextAlignmentCenter; label.layer.masksToBounds = YES; label.backgroundColor = [UIColor grayColor]; label.textColor = [UIColor whiteColor]; [label sizeToFit]; label.width += 30; label.height += 10; label.layer.cornerRadius = label.height / 2; label.centerX = superView.width / 2; if ((gravity & DoricGravityBottom) == DoricGravityBottom) { label.bottom = superView.height - 20; } else if ((gravity & DoricGravityTop) == DoricGravityTop) { label.top = 108; } else { label.centerY = (superView.height - 88) / 2; } [superView addSubview:label]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [label removeFromSuperview]; }); } void ShowToastInVC(UIViewController *_Nonnull vc, NSString *_Nonnull text, DoricGravity gravity) { UIView *superView = vc.view; UILabel *label = [[UILabel alloc] init]; label.font = [UIFont systemFontOfSize:20.f]; label.text = text; label.textAlignment = NSTextAlignmentCenter; label.layer.masksToBounds = YES; label.backgroundColor = [UIColor grayColor]; label.textColor = [UIColor whiteColor]; [label sizeToFit]; label.width += 30; label.height += 10; label.layer.cornerRadius = label.height / 2; label.centerX = superView.width / 2; if ((gravity & DoricGravityBottom) == DoricGravityBottom) { label.bottom = superView.height - 20; } else if ((gravity & DoricGravityTop) == DoricGravityTop) { label.top = 108; } else { label.centerY = (superView.height - 88) / 2; } [superView addSubview:label]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [label removeFromSuperview]; }); } UIImage *UIImageWithColor(UIColor *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 *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } BOOL hasNotch() { if (@available(iOS 11.0, *)) { CGFloat height = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom; return (height > 0); } else { return NO; } }