Ios 在iPhone 6和6 Plus中,在ImageView上设置角半径是不完美的
我正在我的应用程序中使用Ios 在iPhone 6和6 Plus中,在ImageView上设置角半径是不完美的,ios,objective-c,uiview,uiimageview,Ios,Objective C,Uiview,Uiimageview,我正在我的应用程序中使用imageViews,我将corneradius设置为圆形。所有这些都很好,但当我在iPhone 6和6 Plus中验证时,边缘的一些部分似乎被切断了,例如下图中的顶部: 请注意,我没有添加3x启动图像,因此该应用程序实际上显示为原始应用程序的缩放版本。 我假设这个问题的发生是因为比例因子。i、 e.我在代码中指定的宽度不是我在设备中实际看到的宽度。此外,如果我使用autoLayout,我假设这将得到修复 我的假设正确吗?如果没有,请提供解释和解决方案。谢谢:) EDI
imageView
s,我将corneradius
设置为圆形。所有这些都很好,但当我在iPhone 6和6 Plus中验证时,边缘的一些部分似乎被切断了,例如下图中的顶部:
请注意,我没有添加3x启动图像,因此该应用程序实际上显示为原始应用程序的缩放版本。我假设这个问题的发生是因为比例因子。i、 e.我在代码中指定的宽度不是我在设备中实际看到的宽度。此外,如果我使用autoLayout,我假设这将得到修复 我的假设正确吗?如果没有,请提供解释和解决方案。谢谢:) EDIT1: 我的图像视图的大小为
35 x 35
。
我将角半径设置如下:
[commentCell.profileImageView.layer setCornerRadius:17.5];
[commentCell.profileImageView.layer setMasksToBounds:YES];
EDIT2:
浮点似乎不是这样,因为我尝试了相同的帧大小
36 x 36
和角半径18
您的假设是正确的,但是还有另一个解决方案:
[commentCell.profileImageView.layer setCornerRadius:profileImageView.frame.size.width/2];
这也发生在我身上,可能是由于浮动舍入。
您可以尝试两种方法:
- 使用Cashape图层遮罩图像视图图层
- 将图像重新绘制成圆形
在这里添加一些代码。所以,任何人都可以判断。请检查编辑。不幸的是,这并不能解决问题。哦,你可以试试下面答案中提到的那个。我试过了,但这不起作用。另外,它必须是
circlePath
而不是第3行中的bezierPath
,对吗?我已经尝试了我的一个代码,它正在工作,注意计算准确的中心CAShapeLayer*circleClipLayer=[CAShapeLayer];UIBezierPath*circlePath=[UIBezierPath bezierPath];[circlePath addArcWithCenter:CGPointMake(CGRectGetMidX(imageview.bounds),CGRectGetMidY(imageview.bounds))半径:imageview.bounds.size.width/2 startAngle:0 endAngle:2*M_PI顺时针方向:是];circleClipLayer.path=circlePath.CGPath;imageview.layer.mask=circleClipLayer;是的。我也是这样做的。你确定你在iphone6或6plus上试过吗?你没用过自动布局吗?你还没有添加3倍启动图像吗?我正在使用autolayout,我在两个模拟器上都尝试过,我有一个3倍图像,我建议你在添加maskI之前检查视图帧,在应用遮罩之前检查帧。我也检查了窗框和屏幕。但它都显示了缩放版本的相同宽度。使用自动布局解决了这个问题。我在问题中已提及这点。请再核对一下这个问题。
CAShapeLayer *circleClipLayer=[CAShapeLayer layer];
UIBezierPath * circlePath = [UIBezierPath bezierPath];
[circlePath addArcWithCenter:yourcenter radius:yourradius startAngle:0 endAngle:2 * M_PI clockwise:YES];
circleClipLayer.path = circlePath.CGPath;
yourimageview.layer.mask=circleClipLayer;