相关疑难解决方法(0)

UIImage上的圆角

我正在尝试使用圆角在iPhone上绘制图像,以及联系人应用程序中的联系人图像.我有一些通常可以工作的代码,但它偶尔会在UIImage绘图例程中崩溃EXEC_BAD_ACCESS- KERN_INVALID_ADDRESS.我认为这可能与几个星期前我提出的裁剪问题有关,但我相信我正确地设置了裁剪路径.

这是我正在使用的代码 - 当它没有崩溃时,结果看起来很好,任何想要获得类似外观的人都可以免费借用代码.

- (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); …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch image-manipulation objective-c

58
推荐指数
3
解决办法
5万
查看次数

带圆角的UIView:如何正确剪辑子视图?

我创建了一个UIView覆盖的子类,drawRect:并用于AddArcToPoint()绘制圆角.(我不想使用图层的圆角半径属性,因为我需要定义哪些角必须被舍入.)但是我无法解决的问题是:如果我在(0 | 0)添加子视图,它会隐藏我的圆形角落.知道如何解决这个问题吗?我希望它很好地剪辑.

这是绘制圆角矩形的代码.这是Monotouch,但任何开发人员都应该可以阅读.

(你可以在这里找到完整的代码:https://github.com/Krumelur/RoundedRectView)

public override void Draw (RectangleF rect)
        {
            using (var oContext = UIGraphics.GetCurrentContext())
            {
                oContext.SetLineWidth (this.StrokeWidth);
                oContext.SetStrokeColor (this.oStrokeColor.CGColor);
                oContext.SetFillColor (this.oRectColor.CGColor);

                RectangleF oRect = this.Bounds;

                float fRadius = this.CornerRadius;
                float fWidth = oRect.Width;
                float fHeight = oRect.Height;

                // Make sure corner radius isn't larger than half the shorter side.
                if (fRadius > fWidth / 2.0f)
                {
                    fRadius = fWidth / 2.0f;
                }
                if (fRadius > fHeight / …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch quartz-graphics xamarin.ios ios

18
推荐指数
1
解决办法
2万
查看次数