在我的一个应用程序中,我有一个自定义绘制的半透明UIView
,我用它作为另一个UIView顶部的封面以获得特殊效果。CGContextSetLineWidth围绕路径变化宽度
下查看:
下查看与自定义视图在最前面:
它的工作原理,其巨大的iPhone在侧边只有10个像素,但现在我需要扩大左边和右边与其下面的行匹配。
这里是我的代码:
- (void)draw:(TTStyleContext*)context {
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
[_color setStroke];
CGContextSetLineWidth(ctx, MIN(_xwidth, _ywidth));
CGFloat fw = context.frame.size.width;
CGFloat fh = context.frame.size.height;
CGContextMoveToPoint(ctx, fw, floor(fh/2));
CGContextAddArcToPoint(ctx, fw, fh, floor(fw/2), fh, RD(_radius));
CGContextAddArcToPoint(ctx, 0, fh, 0, floor(fh/2), RD(_radius));
CGContextAddArcToPoint(ctx, 0, 0, floor(fw/2), 0, RD(_radius));
CGContextAddArcToPoint(ctx, fw, 0, fw, floor(fh/2), RD(_radius));
CGContextClosePath(ctx);
CGContextStrokePath(ctx);
CGContextRestoreGState(ctx);
context.frame = CGRectInset(context.frame, _xwidth/2, _ywidth/2);
return [self.next draw:context];
}
设置_xwidth
和_ywidth
,这段代码的关键部分是MIN
的笔触宽度后。这里的想法是,该框架默认情况下,相同的笔触宽度。我要求它做的是使两边的笔画宽度比顶部和底部的宽度更大。使用MIN
可确保中风不会受到更厚的_xwidth
尺寸并渗入中心。如果我使用的值为_ywidth
,则边看起来很棒,但由于顶部和底部边框渗入中心,因此我不再获得透明红色。这使我想起了我的问题:
有没有办法让我指定我想要的行程是_xwidth
厚两侧和_ywidth
厚的顶部和底部?如果不是,还有另一种更容易忽视的方法吗?
我的代码,_xwidth设置为42,_ywidth设置为10,我得到这个: 你可以看到我今天在这里,我需要怎么去一边行程来掩盖裸露的红背景。