我试图在iPhone上使用圆角绘制图像,这是一种在Contacts应用程序中显示联系人图像的方法。我有一些代码可以正常工作,但它偶尔会在UIImage绘图例程内部崩溃,访问EXEC\u BAD\u–KERN\u无效\u地址。我想这可能与几周前我问的裁剪问题有关,但我相信我设置的裁剪路径是正确的
下面是我正在使用的代码——当它没有崩溃时,结果看起来很好,任何希望获得类似外观的人都可以免费借用代码
-(UIImage*)边框图像WithRect:(CGRect)DSRECT半径:(CGFloat)半径{
UIImage*maskedImage=nil;
半径=最小值(半径,.5*MIN(CGRectGetWidth(DsRect),CGRectGetHeight(DsRect));
CGRect interiorRect=CGRectInset(DSRECT,半径,半径);
UIGraphicsBeginImageContext(dstRect.size);
CGContextRef maskedContextRef=UIGraphicsGetCurrentContext();
CGContextSaveGState(maskedContextRef);
CGMutablePathRef borderPath=CGPathCreateMutable();
CGPathAddArc(边界路径,NULL,CGRectGetMinX(interiorRect),CGRectGetMinY(interiorRect),半径,PndegereToRadian(180),PndegereToRadian(270),否);
CGPathAddArc(边界路径,NULL,CGRectGetMaxX(内部Rect),CGRectGetMinY(内部Rect),半径,PndegeToradian(270.0),PndegeToradian(360.0),否);
CGPathAddArc(边界路径,NULL,CGRectGetMaxX(interiorRect),CGRectGetMaxY(interiorRect),半径,PndegeToradian(0.0),PndegeToradian(90.0),否);
CGPathAddArc(边界路径,NULL,CGRectGetMinX(interiorRect),CGRectGetMaxY(interiorRect),半径,PNDegreeToRadian(90.0),PNDegreeToRadian(180.0),否);
CGContextBeginPath(maskedContextRef);
CGContextAddPath(maskedContextRef,borderPath);
CGContextClosePath(maskedContextRef);
CGContextClip(maskedContextRef);
[self drawInRect:dstRect];
maskedImage=UIGraphicsGetImageFromCurrentImageContext();
CGContextRestoreGState(maskedContextRef);
UIGraphicsSendImageContext();
返回蒙面图像;
}
这是坠机日志。每当我遇到这样的事故,它看起来都是一样的
异常类型:EXC\U坏访问(SIGSEGV) 异常代码:0x6e2e6181处的内核地址无效 崩溃线程:0 线程0崩溃: 0 com.apple.CoreGraphics 0x30fe56d8 CGGStateGetRenderingIntent+4 1 libRIP.A.dylib 0x33c4a7d8 ripc_渲染+104 2 libRIP.A.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:radius:](UIImage+PNAdditions.m:187)
这里有一个在iPhone3.0及更高版本中可用的更简单的方法。每个基于视图的对象都有一个关联的层。每个层都可以设置一个角半径,这将为您提供您想要的:
UIImageView*roundedView=[[UIImageView alloc]initWithImage:[UIImage imagename:@“wood.jpg]”;
//获取任何视图的图层
CALayer*l=[roundedView图层];
[l setMasksToBounds:是];
[l设置转弯半径:10.0];
//您甚至可以添加边框
[l:宽度:4.0];
[l setBorderColor:[[UIColor blueColor]CGColor]];