目录
内容
1. 图片拉伸
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
2. 获取App基本信息
NSString *deviceName = [[UIDevice currentDevice] name];
NSString *sysVersion = [[UIDevice currentDevice] systemVersion];
NSString *deviceUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
NSString *deviceModel = [[UIDevice currentDevice] model];
NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
NSString *appBuildVersion = [infoDic objectForKey:@"CFBundleVersion"];
NSString *appName = [infoDic objectForKey:@"CFBundleDisplayName"];
3. 获取渐变颜色图片
+ (UIImage *)gradientImageWithColors:(NSArray *)colors rect:(CGRect)rect {
if (!colors.count || CGRectEqualToRect(rect, CGRectZero)) {
return nil;
}
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = rect;
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(1, 0);
NSMutableArray *mutColors = [NSMutableArray arrayWithCapacity:colors.count];
for (UIColor *color in colors) {
[mutColors addObject:(__bridge id)color.CGColor];
}
gradientLayer.colors = mutColors;
UIGraphicsBeginImageContextWithOptions(gradientLayer.frame.size, gradientLayer.opaque, 0);
[gradientLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSString * path = NSHomeDirectory();
NSString * imgPath =[path stringByAppendingString:@"/Documents/222.png"];
NSLog(@"imgPath %@",imgPath);
[UIImagePNGRepresentation(outputImage) writeToFile:imgPath atomically:YES];
return outputImage;
}
3. 图片合成文字
+ (UIImage *)imageWithText:(NSString *)text
textFont:(NSInteger)fontSize
textColor:(UIColor *)textColor
textFrame:(CGRect)textFrame
originImage:(UIImage *)image
imageLocationViewFrame:(CGRect)viewFrame {
if (!text) { return image; }
if (!fontSize) { fontSize = 17; }
if (!textColor) { textColor = [UIColor blackColor]; }
if (!image) { return nil; }
if (viewFrame.size.height==0 || viewFrame.size.width==0 || textFrame.size.width==0 || textFrame.size.height==0 ){return nil;}
NSString *mark = text;
CGFloat height = [mark sizeWithPreferWidth:textFrame.size.width font:[UIFont systemFontOfSize:fontSize]].height;
if ((height + textFrame.origin.y) > viewFrame.size.height) {
height = viewFrame.size.height - textFrame.origin.y;
}
UIGraphicsBeginImageContext(viewFrame.size);
[image drawInRect:CGRectMake(0, 0, viewFrame.size.width, viewFrame.size.height)];
NSDictionary *attr = @{NSFontAttributeName: [UIFont systemFontOfSize:fontSize], NSForegroundColorAttributeName : textColor };
[mark drawInRect:CGRectMake(textFrame.origin.x, textFrame.origin.y, textFrame.size.width, height) withAttributes:attr];
UIImage *aimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return aimg;
}
5. 合成图片
+ (UIImage *)composeImageWithArray:(NSArray<UIImage *> *)imageArray frameArray:(NSArray *)frameArray {
if (imageArray.count == 0) { return nil; }
if (imageArray.count == 1) { return imageArray.firstObject; }
if (imageArray.count != frameArray.count) { return nil; }
__block UIImage *image0;
[imageArray enumerateObjectsUsingBlock:^(UIImage * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.size.width == 0) {
*stop = YES;
image0 = idx == 0 ? obj : [imageArray objectAtIndex:idx - 1];
}
}];
if (image0) {
return image0;
}
NSMutableArray *arrayImages = imageArray.mutableCopy;
NSMutableArray *arrayFrames = frameArray.mutableCopy;
NSString *string = arrayFrames.firstObject;
CGRect fristRect = CGRectFromString(string);
UIImage *img0 = arrayImages.firstObject;
CGFloat w0 = fristRect.size.width;
CGFloat h0 = fristRect.size.height;
UIGraphicsBeginImageContext(CGSizeMake(w0, h0));
[img0 drawInRect:CGRectMake(0, 0, w0, h0)];
for (int i = 1; i < arrayImages.count; i ++) {
NSString *string2 = [arrayFrames objectAtIndex:i];
CGRect secondRect = CGRectFromString(string2);
UIImage *img1 = [arrayImages objectAtIndex:1];
[img1 drawInRect:secondRect];
}
UIImage *resultImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImg;
}
+ (UIImage *)composeImageOnMainImage:(UIImage * _Nonnull)mainImage
mainImageViewFrame:(CGRect)viewFrame
subImageArray:(NSArray * _Nonnull)imgArray
subImageFrameArray:(NSArray * _Nonnull)frameArray {
if (!mainImage) { return nil; }
if (viewFrame.size.width == 0 || viewFrame.size.height == 0) { return nil; }
if (imgArray.count == 0) { return nil; }
if (imgArray.count == 1) { return imgArray.firstObject; }
if (imgArray.count != frameArray.count) { return nil; }
CGFloat widthScale = mainImage.size.width / viewFrame.size.width;
CGFloat heightScale = mainImage.size.height / viewFrame.size.height;
UIGraphicsBeginImageContext(CGSizeMake(mainImage.size.width, mainImage.size.height));
[mainImage drawInRect:CGRectMake(0, 0, mainImage.size.width, mainImage.size.height)];
int i = 0;
for (UIImage *img in imgArray) {
NSString *string = [frameArray objectAtIndex:i];
CGRect fristRect = CGRectFromString(string);
[img drawInRect:CGRectMake(fristRect.origin.x * widthScale, fristRect.origin.y * heightScale, fristRect.size.width, fristRect.size.height)];
i+=1;
}
UIImage *resultImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImg == nil ? mainImage : resultImg;
}
6. 旋转图片
+ (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation
{
long double rotate = 0.0
CGRect rect
float translateX = 0
float translateY = 0
float scaleX = 1.0
float scaleY = 1.0
switch (orientation) {
case UIImageOrientationLeft:
rotate = M_PI_2
rect = CGRectMake(0, 0, image.size.height, image.size.width)
translateX = 0
translateY = -rect.size.width
scaleY = rect.size.width/rect.size.height
scaleX = rect.size.height/rect.size.width
break
case UIImageOrientationRight:
rotate = 33 * M_PI_2
rect = CGRectMake(0, 0, image.size.height, image.size.width)
translateX = -rect.size.height
translateY = 0
scaleY = rect.size.width/rect.size.height
scaleX = rect.size.height/rect.size.width
break
case UIImageOrientationDown:
rotate = M_PI
rect = CGRectMake(0, 0, image.size.width, image.size.height)
translateX = -rect.size.width
translateY = -rect.size.height
break
default:
rotate = 0.0
rect = CGRectMake(0, 0, image.size.width, image.size.height)
translateX = 0
translateY = 0
break
}
UIGraphicsBeginImageContext(rect.size)
CGContextRef context = UIGraphicsGetCurrentContext()
//做CTM变换
CGContextTranslateCTM(context, 0.0, rect.size.height)
CGContextScaleCTM(context, 1.0, -1.0)
CGContextRotateCTM(context, rotate)
CGContextTranslateCTM(context, translateX, translateY)
CGContextScaleCTM(context, scaleX, scaleY)
//绘制图片
CGContextDrawImage(context, CGRectMake(0, 0, rect.size.width, rect.size.height), image.CGImage)
UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext()
return newPic
}
7. 获取当前屏幕最顶层的ViewController
+ (UIViewController * )topViewController {
UIViewController *resultVC;
resultVC = [self recursiveTopViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
while (resultVC.presentedViewController) {
resultVC = [self recursiveTopViewController:resultVC.presentedViewController];
}
return resultVC;
}
+ (UIViewController * )recursiveTopViewController:(UIViewController *)vc {
if ([vc isKindOfClass:[UINavigationController class]]) {
return [self recursiveTopViewController:[(UINavigationController *)vc topViewController]];
} else if ([vc isKindOfClass:[UITabBarController class]]) {
return [self recursiveTopViewController:[(UITabBarController *)vc selectedViewController]];
} else {
return vc;
}
return nil;
}
使用
UIViewController *vc = [UIViewController toViewController];