我正在编写一种创建UIImageView
的方法,其中包含一个透明的UIImage
,左上角或右上角有一个圆角位(如果我将此图像添加到{{1}使用与视图后面的颜色相同的颜色,它会产生圆角的错觉 - 我知道CALayer的圆角,我不会因为某个原因而使用。
如果转角类型为UIView
,则以下代码按预期工作。 UIRectCornerTopLeft
情况在图像的右上角绘制了圆角位,但由于某种原因,它还添加了一个“幻影”填充三角形,其顶点从左上角到左下角到右下角然后回到左上角。我不知道这个幻影三角形来自哪里,因为我没有在任何地方指定左下角。
请帮助,我疯了。这是代码:
UIRectCornerTopRight
答案 0 :(得分:1)
使用3/2 PI表示起始角度,2 PI表示结束角度
您可以参考有关如何指定角度的UIBezierPath
文档。在第一个解决方案中,3/2 PI实际上是指由直线向上的线所形成的角度,因此弧从顶部开始,2 PI(相当于0,但不是在这里,因为我们需要指定方向,即顺时针方向) /逆时针)是由右边的线创建的角度(以度为单位,这是360度(我将再次指出它与0度在同一个地方),因此你的弧线在相交的点处结束从那个角度来看。
答案 1 :(得分:1)
这是更正后的版本,万一有人想要它。对我来说,只是一夜之间的愚蠢。
+ (UIImageView *)roundedCornerImageOfWidth:(CGFloat)width
withCornerBackgroundColor:(UIColor *)cornerColor
forCorner:(UIRectCorner)corner {
CGRect rect = CGRectMake(0, 0, width, width);
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, width), NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
// fill image with transparent background
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextFillRect(context, rect);
// set the color for solid corner
CGContextSetFillColorWithColor(context, [cornerColor CGColor]);
UIBezierPath *maskPath = [UIBezierPath bezierPath];
switch (corner) {
case UIRectCornerTopLeft:
{
CGPoint pt;
pt = CGPointMake(0, width); // lower left
[maskPath moveToPoint:pt];
pt = CGPointMake(0, 0); // upper left
[maskPath addLineToPoint:pt];
pt = CGPointMake(width, 0); // upper right
[maskPath addLineToPoint:pt];
// arc back to lower left
[maskPath addArcWithCenter:CGPointMake(width, width)
radius:width startAngle:0 endAngle:0.5 * M_PI clockwise:NO];
}
break;
case UIRectCornerTopRight:
{
// start at upper right
CGPoint pt;
pt = CGPointMake(width, 0);
[maskPath moveToPoint:pt];
// move to lower right
pt = CGPointMake(width, width);
[maskPath addLineToPoint:pt];
// arc back to upper left
[maskPath addArcWithCenter:CGPointMake(0, width) radius:width
startAngle:2 * M_PI endAngle:1.5 * M_PI clockwise:NO];
// back to upper right
pt = CGPointMake(width, 0);
[maskPath addLineToPoint:pt];
}
break;
default:
break;
}
[maskPath closePath];
[maskPath fill];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.backgroundColor = [UIColor clearColor];
imageView.frame = CGRectMake(0, 0, width, width);
return imageView;
}