iOS: image render optimize
UIGraphicsBeginImageContextWithOptions replaced with UIGraphicsImageRenderer above iOS 10
This commit is contained in:
		| @@ -147,15 +147,29 @@ - (UIImage *)currentPlaceHolderImage { | ||||
|         UIColor *color = DoricColor(self.placeHolderColor); | ||||
|         CGRect rect = CGRectMake(0, 0, 1, 1); | ||||
|         self.view.contentMode = UIViewContentModeScaleToFill; | ||||
|         UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale); | ||||
|          | ||||
|         if (@available(iOS 10.0, *)) { | ||||
|             UIGraphicsImageRendererFormat *format = [[UIGraphicsImageRendererFormat alloc] init]; | ||||
|             format.scale = [UIScreen mainScreen].scale; | ||||
|             UIGraphicsImageRenderer *render = [[UIGraphicsImageRenderer alloc]initWithSize:rect.size format:format]; | ||||
|             UIImage *image = [render imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { | ||||
|                 CGContextRef context = rendererContext.CGContext; | ||||
|                  | ||||
|                 CGContextSetFillColorWithColor(context, color.CGColor); | ||||
|                 CGContextFillRect(context, rect); | ||||
|             }]; | ||||
|             return image; | ||||
|         } else { | ||||
|             UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale); | ||||
| 
 | ||||
|         CGContextRef context = UIGraphicsGetCurrentContext(); | ||||
|         CGContextSetFillColorWithColor(context, color.CGColor); | ||||
|         CGContextFillRect(context, rect); | ||||
|             CGContextRef context = UIGraphicsGetCurrentContext(); | ||||
|             CGContextSetFillColorWithColor(context, color.CGColor); | ||||
|             CGContextFillRect(context, rect); | ||||
| 
 | ||||
|         UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); | ||||
|         UIGraphicsEndImageContext(); | ||||
|         return image; | ||||
|             UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); | ||||
|             UIGraphicsEndImageContext(); | ||||
|             return image; | ||||
|         } | ||||
|     } | ||||
|     return self.doricContext.driver.registry.defaultPlaceHolderImage; | ||||
| } | ||||
| @@ -189,15 +203,29 @@ - (UIImage *)currentErrorImage { | ||||
|         UIColor *color = DoricColor(self.errorColor); | ||||
|         CGRect rect = CGRectMake(0, 0, 1, 1); | ||||
|         self.view.contentMode = UIViewContentModeScaleToFill; | ||||
|         UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale); | ||||
|          | ||||
|         if (@available(iOS 10.0, *)) { | ||||
|             UIGraphicsImageRendererFormat *format = [[UIGraphicsImageRendererFormat alloc] init]; | ||||
|             format.scale = [UIScreen mainScreen].scale; | ||||
|             UIGraphicsImageRenderer *render = [[UIGraphicsImageRenderer alloc]initWithSize:rect.size format:format]; | ||||
|             UIImage *image = [render imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { | ||||
|                 CGContextRef context = rendererContext.CGContext; | ||||
|                  | ||||
|                 CGContextSetFillColorWithColor(context, color.CGColor); | ||||
|                 CGContextFillRect(context, rect); | ||||
|             }]; | ||||
|             return image; | ||||
|         } else { | ||||
|             UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale); | ||||
| 
 | ||||
|         CGContextRef context = UIGraphicsGetCurrentContext(); | ||||
|         CGContextSetFillColorWithColor(context, color.CGColor); | ||||
|         CGContextFillRect(context, rect); | ||||
|             CGContextRef context = UIGraphicsGetCurrentContext(); | ||||
|             CGContextSetFillColorWithColor(context, color.CGColor); | ||||
|             CGContextFillRect(context, rect); | ||||
| 
 | ||||
|         UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); | ||||
|         UIGraphicsEndImageContext(); | ||||
|         return image; | ||||
|             UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); | ||||
|             UIGraphicsEndImageContext(); | ||||
|             return image; | ||||
|         } | ||||
|     } | ||||
|     return self.doricContext.driver.registry.defaultErrorImage; | ||||
| } | ||||
|   | ||||
| @@ -286,18 +286,37 @@ - (UIImage *)gradientImageFromColors:(NSArray *)colors | ||||
|                           startPoint:(CGPoint)startPoint | ||||
|                             endPoint:(CGPoint)endPoint | ||||
|                              imgSize:(CGSize)imgSize { | ||||
|     UIGraphicsBeginImageContextWithOptions(imgSize, NO, [UIScreen mainScreen].scale); | ||||
|     CGContextRef context = UIGraphicsGetCurrentContext(); | ||||
|     CGContextSaveGState(context); | ||||
|     CGColorSpaceRef colorSpace = CGColorGetColorSpace((__bridge CGColorRef) colors.lastObject); | ||||
|     CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations); | ||||
|     CGPoint start = (CGPoint) {startPoint.x * imgSize.width, startPoint.y * imgSize.height}; | ||||
|     CGPoint end = (CGPoint) {endPoint.x * imgSize.width, endPoint.y * imgSize.height}; | ||||
|     CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); | ||||
|     UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); | ||||
|     CGGradientRelease(gradient); | ||||
|     CGContextRestoreGState(context); | ||||
|     UIGraphicsEndImageContext(); | ||||
|     return image; | ||||
|     if (@available(iOS 10.0, *)) { | ||||
|         UIGraphicsImageRendererFormat *format = [[UIGraphicsImageRendererFormat alloc] init]; | ||||
|         format.scale = [UIScreen mainScreen].scale; | ||||
|         UIGraphicsImageRenderer *render = [[UIGraphicsImageRenderer alloc]initWithSize:imgSize format:format]; | ||||
|         UIImage *image = [render imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { | ||||
|             CGContextRef context = rendererContext.CGContext; | ||||
|              | ||||
|             CGContextSaveGState(context); | ||||
|             CGColorSpaceRef colorSpace = CGColorGetColorSpace((__bridge CGColorRef) colors.lastObject); | ||||
|             CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations); | ||||
|             CGPoint start = (CGPoint) {startPoint.x * imgSize.width, startPoint.y * imgSize.height}; | ||||
|             CGPoint end = (CGPoint) {endPoint.x * imgSize.width, endPoint.y * imgSize.height}; | ||||
|             CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); | ||||
|             CGGradientRelease(gradient); | ||||
|             CGContextRestoreGState(context); | ||||
|         }]; | ||||
|         return image; | ||||
|     } else { | ||||
|         UIGraphicsBeginImageContextWithOptions(imgSize, NO, [UIScreen mainScreen].scale); | ||||
|         CGContextRef context = UIGraphicsGetCurrentContext(); | ||||
|         CGContextSaveGState(context); | ||||
|         CGColorSpaceRef colorSpace = CGColorGetColorSpace((__bridge CGColorRef) colors.lastObject); | ||||
|         CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations); | ||||
|         CGPoint start = (CGPoint) {startPoint.x * imgSize.width, startPoint.y * imgSize.height}; | ||||
|         CGPoint end = (CGPoint) {endPoint.x * imgSize.width, endPoint.y * imgSize.height}; | ||||
|         CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); | ||||
|         UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); | ||||
|         CGGradientRelease(gradient); | ||||
|         CGContextRestoreGState(context); | ||||
|         UIGraphicsEndImageContext(); | ||||
|         return image; | ||||
|     } | ||||
| } | ||||
| @end | ||||
|   | ||||
| @@ -340,19 +340,38 @@ - (UIImage *)gradientImageFromColors:(NSArray *)colors | ||||
|                           startPoint:(CGPoint)startPoint | ||||
|                             endPoint:(CGPoint)endPoint | ||||
|                              imgSize:(CGSize)imgSize { | ||||
|     UIGraphicsBeginImageContextWithOptions(imgSize, NO, [UIScreen mainScreen].scale); | ||||
|     CGContextRef context = UIGraphicsGetCurrentContext(); | ||||
|     CGContextSaveGState(context); | ||||
|     CGColorSpaceRef colorSpace = CGColorGetColorSpace((__bridge CGColorRef) colors.lastObject); | ||||
|     CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations); | ||||
|     CGPoint start = (CGPoint) {startPoint.x * imgSize.width, startPoint.y * imgSize.height}; | ||||
|     CGPoint end = (CGPoint) {endPoint.x * imgSize.width, endPoint.y * imgSize.height}; | ||||
|     CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); | ||||
|     UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); | ||||
|     CGGradientRelease(gradient); | ||||
|     CGContextRestoreGState(context); | ||||
|     UIGraphicsEndImageContext(); | ||||
|     return image; | ||||
|     if (@available(iOS 10.0, *)) { | ||||
|         UIGraphicsImageRendererFormat *format = [[UIGraphicsImageRendererFormat alloc] init]; | ||||
|         format.scale = [UIScreen mainScreen].scale; | ||||
|         UIGraphicsImageRenderer *render = [[UIGraphicsImageRenderer alloc]initWithSize:imgSize format:format]; | ||||
|         UIImage *image = [render imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { | ||||
|             CGContextRef context = rendererContext.CGContext; | ||||
|              | ||||
|             CGContextSaveGState(context); | ||||
|             CGColorSpaceRef colorSpace = CGColorGetColorSpace((__bridge CGColorRef) colors.lastObject); | ||||
|             CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations); | ||||
|             CGPoint start = (CGPoint) {startPoint.x * imgSize.width, startPoint.y * imgSize.height}; | ||||
|             CGPoint end = (CGPoint) {endPoint.x * imgSize.width, endPoint.y * imgSize.height}; | ||||
|             CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); | ||||
|             CGGradientRelease(gradient); | ||||
|             CGContextRestoreGState(context); | ||||
|         }]; | ||||
|         return image; | ||||
|     } else { | ||||
|         UIGraphicsBeginImageContextWithOptions(imgSize, NO, [UIScreen mainScreen].scale); | ||||
|         CGContextRef context = UIGraphicsGetCurrentContext(); | ||||
|         CGContextSaveGState(context); | ||||
|         CGColorSpaceRef colorSpace = CGColorGetColorSpace((__bridge CGColorRef) colors.lastObject); | ||||
|         CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations); | ||||
|         CGPoint start = (CGPoint) {startPoint.x * imgSize.width, startPoint.y * imgSize.height}; | ||||
|         CGPoint end = (CGPoint) {endPoint.x * imgSize.width, endPoint.y * imgSize.height}; | ||||
|         CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); | ||||
|         UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); | ||||
|         CGGradientRelease(gradient); | ||||
|         CGContextRestoreGState(context); | ||||
|         UIGraphicsEndImageContext(); | ||||
|         return image; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| - (void)requestLayout { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user