图像视图中的选择性圆角 - iOS
Selective round corners in image view - iOS
我正在使用 Xcode 版本 6.1.1 和 iOS 8.1 开发我的应用程序,其中我需要根据设计在图像视图中设置圆角左上角和右上角。
我之前用过下面的代码,在之前的版本Xcode中可以正常使用:
UIImageView *locationImage = (UIImageView *)[cell viewWithTag:101];
UIBezierPath *maskPath1;
maskPath1 = [UIBezierPath bezierPathWithRoundedRect:locationImage.bounds
byRoundingCorners:(UIRectCornerTopRight | UIRectCornerTopLeft)
cornerRadii:CGSizeMake(5.0, 5.0)];
CAShapeLayer *maskLayer1 = [[CAShapeLayer alloc] init];
maskLayer1.frame = locationImage.bounds;
maskLayer1.path = maskPath1.CGPath;
locationImage.layer.mask = maskLayer1;
现在我把左上角弄圆了,但不是右上角。我知道代码是正确的,因为如果我将它应用于不受约束的图像视图,它会很好地工作,但我需要将项目约束到视图。我使用自动布局。
link 到图像:https://www.dropbox.com/s/orisd8gzbdhsr4z/round-corners.tiff?dl=0
我做错了什么?我怎样才能正确地圆两个角?
提前致谢
*对不起我的英语
@jcmartinac,
你可以使用这个解决方案-how to set cornerRadius for only top-left and top-right corner of a UIView?
在您的代码中应用此代码,我已经测试过,它运行良好。
maskPath1 = (UIImageView *)[self roundCornersOnView: maskPath1 onTopLeft:YES topRight:YES bottomLeft:NO bottomRight:NO radius:20.0];
//使用下面的方法设置圆角半径..
-(UIView *)roundCornersOnView:(UIView *)view onTopLeft:(BOOL)tl topRight:(BOOL)tr bottomLeft:(BOOL)bl bottomRight:(BOOL)br radius:(float)radius {
if (tl || tr || bl || br) {
UIRectCorner corner = 0; //holds the corner
//Determine which corner(s) should be changed
if (tl) {
corner = corner | UIRectCornerTopLeft;
}
if (tr) {
corner = corner | UIRectCornerTopRight;
}
if (bl) {
corner = corner | UIRectCornerBottomLeft;
}
if (br) {
corner = corner | UIRectCornerBottomRight;
}
UIView *roundedView = view;
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:roundedView.bounds byRoundingCorners:corner cornerRadii:CGSizeMake(radius, radius)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = roundedView.bounds;
maskLayer.path = maskPath.CGPath;
roundedView.layer.mask = maskLayer;
return roundedView;
} else {
return view;
}
}
///////////// 对于 TableVIew 在 cellForRowAtIndexPath 方法中使用下面的代码 /////
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.Img_thumb=(UIImageView *)[self roundCornersOnView: cell.Img_thumb onTopLeft:YES topRight:YES bottomLeft:NO bottomRight:NO radius:20.0];
}
检查屏幕截图 :->
最后我找到了一个解决方案,将 uiimageview 嵌套在用户定义的运行时属性中设置角半径的 uiview 中,并将此 uiview 的 cliptobounds 设置为是。
如果有人需要进一步解释,我会很高兴
我正在使用 Xcode 版本 6.1.1 和 iOS 8.1 开发我的应用程序,其中我需要根据设计在图像视图中设置圆角左上角和右上角。
我之前用过下面的代码,在之前的版本Xcode中可以正常使用:
UIImageView *locationImage = (UIImageView *)[cell viewWithTag:101];
UIBezierPath *maskPath1;
maskPath1 = [UIBezierPath bezierPathWithRoundedRect:locationImage.bounds
byRoundingCorners:(UIRectCornerTopRight | UIRectCornerTopLeft)
cornerRadii:CGSizeMake(5.0, 5.0)];
CAShapeLayer *maskLayer1 = [[CAShapeLayer alloc] init];
maskLayer1.frame = locationImage.bounds;
maskLayer1.path = maskPath1.CGPath;
locationImage.layer.mask = maskLayer1;
现在我把左上角弄圆了,但不是右上角。我知道代码是正确的,因为如果我将它应用于不受约束的图像视图,它会很好地工作,但我需要将项目约束到视图。我使用自动布局。
link 到图像:https://www.dropbox.com/s/orisd8gzbdhsr4z/round-corners.tiff?dl=0
我做错了什么?我怎样才能正确地圆两个角?
提前致谢
*对不起我的英语
@jcmartinac,
你可以使用这个解决方案-how to set cornerRadius for only top-left and top-right corner of a UIView?
在您的代码中应用此代码,我已经测试过,它运行良好。
maskPath1 = (UIImageView *)[self roundCornersOnView: maskPath1 onTopLeft:YES topRight:YES bottomLeft:NO bottomRight:NO radius:20.0];
//使用下面的方法设置圆角半径..
-(UIView *)roundCornersOnView:(UIView *)view onTopLeft:(BOOL)tl topRight:(BOOL)tr bottomLeft:(BOOL)bl bottomRight:(BOOL)br radius:(float)radius {
if (tl || tr || bl || br) {
UIRectCorner corner = 0; //holds the corner
//Determine which corner(s) should be changed
if (tl) {
corner = corner | UIRectCornerTopLeft;
}
if (tr) {
corner = corner | UIRectCornerTopRight;
}
if (bl) {
corner = corner | UIRectCornerBottomLeft;
}
if (br) {
corner = corner | UIRectCornerBottomRight;
}
UIView *roundedView = view;
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:roundedView.bounds byRoundingCorners:corner cornerRadii:CGSizeMake(radius, radius)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = roundedView.bounds;
maskLayer.path = maskPath.CGPath;
roundedView.layer.mask = maskLayer;
return roundedView;
} else {
return view;
}
}
///////////// 对于 TableVIew 在 cellForRowAtIndexPath 方法中使用下面的代码 /////
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.Img_thumb=(UIImageView *)[self roundCornersOnView: cell.Img_thumb onTopLeft:YES topRight:YES bottomLeft:NO bottomRight:NO radius:20.0];
}
检查屏幕截图 :->
最后我找到了一个解决方案,将 uiimageview 嵌套在用户定义的运行时属性中设置角半径的 uiview 中,并将此 uiview 的 cliptobounds 设置为是。
如果有人需要进一步解释,我会很高兴