Je suis en train de dessiner des images sur l'iPhone à l'aide avec des coins arrondis, un la les images des contacts dans l'application Contacts. J'ai un code qui fonctionne généralement, mais parfois il se bloque à l'intérieur de la UIImage dessin routines avec un EXEC_BAD_ACCESS
- KERN_INVALID_ADDRESS
. J'ai pensé que cela pourrait être lié à l' recadrage question , j'ai demandé il y a quelques semaines, mais je crois que je suis la mise en place du chemin de détourage correctement.
Voici le code que j'utilise - quand il ne plante pas, le résultat a l'air bien et quiconque cherche à obtenir un look similaire est libre d'emprunter le code.
- (UIImage *)borderedImageWithRect: (CGRect)dstRect radius:(CGFloat)radius {
UIImage *maskedImage = nil;
radius = MIN(radius, .5 * MIN(CGRectGetWidth(dstRect), CGRectGetHeight(dstRect)));
CGRect interiorRect = CGRectInset(dstRect, radius, radius);
UIGraphicsBeginImageContext(dstRect.size);
CGContextRef maskedContextRef = UIGraphicsGetCurrentContext();
CGContextSaveGState(maskedContextRef);
CGMutablePathRef borderPath = CGPathCreateMutable();
CGPathAddArc(borderPath, NULL, CGRectGetMinX(interiorRect), CGRectGetMinY(interiorRect), radius, PNDegreeToRadian(180), PNDegreeToRadian(270), NO);
CGPathAddArc(borderPath, NULL, CGRectGetMaxX(interiorRect), CGRectGetMinY(interiorRect), radius, PNDegreeToRadian(270.0), PNDegreeToRadian(360.0), NO);
CGPathAddArc(borderPath, NULL, CGRectGetMaxX(interiorRect), CGRectGetMaxY(interiorRect), radius, PNDegreeToRadian(0.0), PNDegreeToRadian(90.0), NO);
CGPathAddArc(borderPath, NULL, CGRectGetMinX(interiorRect), CGRectGetMaxY(interiorRect), radius, PNDegreeToRadian(90.0), PNDegreeToRadian(180.0), NO);
CGContextBeginPath(maskedContextRef);
CGContextAddPath(maskedContextRef, borderPath);
CGContextClosePath(maskedContextRef);
CGContextClip(maskedContextRef);
[self drawInRect: dstRect];
maskedImage = UIGraphicsGetImageFromCurrentImageContext();
CGContextRestoreGState(maskedContextRef);
UIGraphicsEndImageContext();
return maskedImage;
}
et voici le rapport de crash. Il regarde la même chose à chaque fois que je reçois un de ces accidents
Type d'Exception: EXC_BAD_ACCESS (SIGSEGV) Codes d'Exception: KERN_INVALID_ADDRESS à 0x6e2e6181 S'Est Écrasé Fil: 0 Thread 0 Écrasé: 0 com.apple.CoreGraphics 0x30fe56d8 CGGStateGetRenderingIntent + 4 1 libRIP.Un.dylib 0x33c4a7d8 ripc_RenderImage + 104 2 libRIP.Un.dylib 0x33c51868 ripc_DrawImage + 3860 3 com.apple.CoreGraphics 0x30fecad4 CGContextDelegateDrawImage + 80 4 com.apple.CoreGraphics 0x30feca40 CGContextDrawImage + 368 5 UIKit 0x30a6a708 -[UIImage drawInRect:blendMode:alpha:] + 1460 6 UIKit 0x30a66904 -[UIImage drawInRect:] + 72 7 MyApp 0x0003f8a8 -[UIImage(PNAdditions) borderedImageWithRect:rayon:] (UIImage+PNAdditions.m:187)