iOS: image render optimize
UIGraphicsBeginImageContextWithOptions replaced with UIGraphicsImageRenderer above iOS 10
This commit is contained in:
		| @@ -147,6 +147,19 @@ - (UIImage *)currentPlaceHolderImage { | |||||||
|         UIColor *color = DoricColor(self.placeHolderColor); |         UIColor *color = DoricColor(self.placeHolderColor); | ||||||
|         CGRect rect = CGRectMake(0, 0, 1, 1); |         CGRect rect = CGRectMake(0, 0, 1, 1); | ||||||
|         self.view.contentMode = UIViewContentModeScaleToFill; |         self.view.contentMode = UIViewContentModeScaleToFill; | ||||||
|  |          | ||||||
|  |         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); |             UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale); | ||||||
| 
 | 
 | ||||||
|             CGContextRef context = UIGraphicsGetCurrentContext(); |             CGContextRef context = UIGraphicsGetCurrentContext(); | ||||||
| @@ -157,6 +170,7 @@ - (UIImage *)currentPlaceHolderImage { | |||||||
|             UIGraphicsEndImageContext(); |             UIGraphicsEndImageContext(); | ||||||
|             return image; |             return image; | ||||||
|         } |         } | ||||||
|  |     } | ||||||
|     return self.doricContext.driver.registry.defaultPlaceHolderImage; |     return self.doricContext.driver.registry.defaultPlaceHolderImage; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -189,6 +203,19 @@ - (UIImage *)currentErrorImage { | |||||||
|         UIColor *color = DoricColor(self.errorColor); |         UIColor *color = DoricColor(self.errorColor); | ||||||
|         CGRect rect = CGRectMake(0, 0, 1, 1); |         CGRect rect = CGRectMake(0, 0, 1, 1); | ||||||
|         self.view.contentMode = UIViewContentModeScaleToFill; |         self.view.contentMode = UIViewContentModeScaleToFill; | ||||||
|  |          | ||||||
|  |         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); |             UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale); | ||||||
| 
 | 
 | ||||||
|             CGContextRef context = UIGraphicsGetCurrentContext(); |             CGContextRef context = UIGraphicsGetCurrentContext(); | ||||||
| @@ -199,6 +226,7 @@ - (UIImage *)currentErrorImage { | |||||||
|             UIGraphicsEndImageContext(); |             UIGraphicsEndImageContext(); | ||||||
|             return image; |             return image; | ||||||
|         } |         } | ||||||
|  |     } | ||||||
|     return self.doricContext.driver.registry.defaultErrorImage; |     return self.doricContext.driver.registry.defaultErrorImage; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -286,6 +286,24 @@ - (UIImage *)gradientImageFromColors:(NSArray *)colors | |||||||
|                           startPoint:(CGPoint)startPoint |                           startPoint:(CGPoint)startPoint | ||||||
|                             endPoint:(CGPoint)endPoint |                             endPoint:(CGPoint)endPoint | ||||||
|                              imgSize:(CGSize)imgSize { |                              imgSize:(CGSize)imgSize { | ||||||
|  |     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); |         UIGraphicsBeginImageContextWithOptions(imgSize, NO, [UIScreen mainScreen].scale); | ||||||
|         CGContextRef context = UIGraphicsGetCurrentContext(); |         CGContextRef context = UIGraphicsGetCurrentContext(); | ||||||
|         CGContextSaveGState(context); |         CGContextSaveGState(context); | ||||||
| @@ -300,4 +318,5 @@ - (UIImage *)gradientImageFromColors:(NSArray *)colors | |||||||
|         UIGraphicsEndImageContext(); |         UIGraphicsEndImageContext(); | ||||||
|         return image; |         return image; | ||||||
|     } |     } | ||||||
|  | } | ||||||
| @end | @end | ||||||
|   | |||||||
| @@ -340,6 +340,24 @@ - (UIImage *)gradientImageFromColors:(NSArray *)colors | |||||||
|                           startPoint:(CGPoint)startPoint |                           startPoint:(CGPoint)startPoint | ||||||
|                             endPoint:(CGPoint)endPoint |                             endPoint:(CGPoint)endPoint | ||||||
|                              imgSize:(CGSize)imgSize { |                              imgSize:(CGSize)imgSize { | ||||||
|  |     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); |         UIGraphicsBeginImageContextWithOptions(imgSize, NO, [UIScreen mainScreen].scale); | ||||||
|         CGContextRef context = UIGraphicsGetCurrentContext(); |         CGContextRef context = UIGraphicsGetCurrentContext(); | ||||||
|         CGContextSaveGState(context); |         CGContextSaveGState(context); | ||||||
| @@ -354,6 +372,7 @@ - (UIImage *)gradientImageFromColors:(NSArray *)colors | |||||||
|         UIGraphicsEndImageContext(); |         UIGraphicsEndImageContext(); | ||||||
|         return image; |         return image; | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| - (void)requestLayout { | - (void)requestLayout { | ||||||
|     [self.gradientProps also:^(NSDictionary *dict) { |     [self.gradientProps also:^(NSDictionary *dict) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user