Explorar el Código

修复iOS 17 UIGraphicsBeginImageContextWithOptions 崩溃的问题

Steven hace 1 año
padre
commit
348add3fb1

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Common/Base/KSBaseWKWebViewController.m

@@ -733,7 +733,7 @@ typedef NS_ENUM(NSInteger, CHOOSETYPE) {
     else if ([typeStr isEqualToString:@"mp3"]) {
         [self chooseDocumentWithType:CHOOSETYPE_MP3 bucket:bucket];
     }
-    else if ([typeStr isEqualToString:@"xml"]) {
+    else if (([typeStr isEqualToString:@"xml"] || [typeStr isEqualToString:@"musicxml"])) {
         [self chooseDocumentWithType:CHOOSETYPE_XML bucket:bucket];
     }
 }

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Common/Base/LoadingManager/KSProgressLoadingView.m

@@ -79,7 +79,7 @@
 }
 
 - (UIImage *)createGradientImageWithColor:(NSArray *)colors rect:(CGRect)rect start:(CGPoint)start end:(CGPoint)end {
-    if (!colors.count || CGRectEqualToRect(rect, CGRectZero)) {
+    if (!colors.count || rect.size.width <= 0 || rect.size.height <= 0) {
         return nil;
     }
     CAGradientLayer *gradientLayer = [CAGradientLayer layer];

+ 3 - 0
KulexiuForStudent/KulexiuForStudent/Common/MediaMerge/AudioMerge/UIView+KSCovertImage.m

@@ -10,6 +10,9 @@
 @implementation UIView (KSCovertImage)
 
 + (UIImage *)convertViewToImage:(UIView *)view {
+    if (view.size.width <= 0 || view.size.height <= 0) {
+        return nil;
+    }
     UIImage *image = [[UIImage alloc] init];
     UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, [UIScreen mainScreen].scale);
     [view.layer renderInContext:UIGraphicsGetCurrentContext()];

+ 3 - 0
KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/UIImage+Color.m

@@ -33,6 +33,9 @@
 }
 
 - (UIImage *)maskWithColor:(UIColor *)color {
+    if (self.size.width <= 0 || self.size.height <= 0) {
+        return nil;
+    }
     UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
     [color setFill];
     CGRect bounds = CGRectMake(0, 0, self.size.width, self.size.height);

+ 6 - 0
KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/UIImage+KSScreenShot.m

@@ -21,6 +21,9 @@
 }
 
 + (UIImage *)getCurrentViewShot:(UIView *)view {
+    if (view.size.width <= 0 || view.size.height <= 0) {
+        return nil;
+    }
     CGSize size = view.frame.size;
     CGFloat scale = [UIScreen mainScreen].scale;
     UIGraphicsBeginImageContextWithOptions(size, YES, scale);
@@ -30,6 +33,9 @@
     return image;
 }
 + (UIImage *)getCurrentScrollviewShot:(UIScrollView *)scrollview {
+    if (scrollview.contentSize.width <= 0 || scrollview.contentSize.height <= 0) {
+        return nil;
+    }
     CGSize size = scrollview.contentSize;
     CGFloat scale = [UIScreen mainScreen].scale;
     UIGraphicsBeginImageContextWithOptions(size, YES, scale);

+ 8 - 0
KulexiuForStudent/KulexiuForStudent/Common/Tools/Extension/UIImageView+CornerRadius.m

@@ -62,6 +62,10 @@ const char kProcessedImage;
  * @brief clip the cornerRadius with image, UIImageView must be setFrame before, no off-screen-rendered
  */
 - (void)cornerRadiusWithImage:(UIImage *)image cornerRadius:(CGFloat)cornerRadius rectCornerType:(UIRectCorner)rectCornerType {
+    if (self.bounds.size.width <= 0 || self.bounds.size.height <= 0) {
+        self.image = [[UIImage alloc] init];
+        return;
+    }
     CGSize size = self.bounds.size;
     CGFloat scale = [UIScreen mainScreen].scale;
     CGSize cornerRadii = CGSizeMake(cornerRadius, cornerRadius);
@@ -89,6 +93,10 @@ const char kProcessedImage;
  * @brief clip the cornerRadius with image, draw the backgroundColor you want, UIImageView must be setFrame before, no off-screen-rendered, no Color Blended layers
  */
 - (void)zy_cornerRadiusWithImage:(UIImage *)image cornerRadius:(CGFloat)cornerRadius rectCornerType:(UIRectCorner)rectCornerType backgroundColor:(UIColor *)backgroundColor {
+    if (self.bounds.size.width <= 0 || self.bounds.size.height <= 0) {
+        self.image = [[UIImage alloc] init];
+        return;
+    }
     CGSize size = self.bounds.size;
     CGFloat scale = [UIScreen mainScreen].scale;
     CGSize cornerRadii = CGSizeMake(cornerRadius, cornerRadius);