Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何删除UIImageView上具有圆角和边框宽度的黑色边缘?_Ios_Objective C_Uiimageview_Quartz Graphics - Fatal编程技术网

Ios 如何删除UIImageView上具有圆角和边框宽度的黑色边缘?

Ios 如何删除UIImageView上具有圆角和边框宽度的黑色边缘?,ios,objective-c,uiimageview,quartz-graphics,Ios,Objective C,Uiimageview,Quartz Graphics,我使用以下代码使每个UITableView单元格中的UIImageView具有圆角: - (void)awakeFromNib { // Rounded corners. [[cellImage layer] setCornerRadius:([cellImage frame].size.height / 2)]; [[cellImage layer] setMasksToBounds:YES]; [[cellImage layer] setBorderColor

我使用以下代码使每个UITableView单元格中的
UIImageView
具有圆角:

- (void)awakeFromNib
{
    // Rounded corners.
    [[cellImage layer] setCornerRadius:([cellImage frame].size.height / 2)];
    [[cellImage layer] setMasksToBounds:YES];
    [[cellImage layer] setBorderColor:[[UIColor whiteColor] CGColor]];
    [[cellImage layer] setBorderWidth:3]; // Trouble!
}
我希望图像之间有一点间隙,我想我可以利用边框宽度来实现这一点。下面是实际发生情况的图像:

我想知道如何摆脱那模糊的黑色边界。我想有一种方法可以使用边框宽度。如果没有,最好的方法可能只是调整图像本身的大小,并将边框宽度设置为0。

您要做的是,将轮廓图像和边框剪裁在一起,使单元格的轮廓图像延伸到边框

您缺少这一行:-

cellImage.clipsToBounds = YES;

您可以为遮罩创建bezier路径,为该路径创建形状层,然后为图像视图的层遮罩指定该形状层,而不是使用角半径:

CGFloat margin = 3.0;
CGRect rect = CGRectInset(imageView.bounds, margin, margin);
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(imageView.bounds.size.width/2, imageView.bounds.size.height/2) radius:radius startAngle:0 endAngle:M_PI*2 clockwise:NO];
CAShapeLayer *mask = [CAShapeLayer layer];
mask.path = path.CGPath;
imageView.layer.mask = mask;

为什么要设置边框?要在图像之间留出间隙,否则图像的上边缘和下边缘会接触,设置:-[[cellImage layer]setBorderColor:[[UIColor clearColor]CGColor]];?然后,只需将imageView稍微缩小一点,而不是设置边框宽度。您可以将imageView的宽度和高度降低6 px,以实现该间隙。
没有
ClipToBounds
属性。感谢@Mattpots的纠正,我很忙;-)虽然这是可行的,但我建议使用
[UIBezierPath-bezierPathWithArcCenter:CGPointMake(imageView.bounds.size.width/2,imageView.bounds.size.height/2)radius:radius startAngle:0 endAngle:M_PI*2顺时针:NO]
而不是
bezierPathWithOvalInRect:
,因为它可以生成真正的圆形(你可以用后一种方法注意到一些角度)。当ImageView下面有另一个背景而不是白色时,它不起作用。它显示的是该背景而不是白色。有什么解决的建议吗?嗨@Rob,我想办法了。我将发布新的答案,并合并你的代码。这将帮助开发人员解决问题。