图像视图中的选择性圆角 - iOS

时间:2015-02-24 10:30:59

标签: ios xcode uiimageview rounded-corners cornerradius

我正在使用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;

现在我的左上角是圆形但不是正确的。我知道代码是正确的,因为如果我将它应用于不受约束的图像视图,它运行良好,但我需要将项目约束到视图。我使用自动布局。

链接到图片:https://www.dropbox.com/s/orisd8gzbdhsr4z/round-corners.tiff?dl=0

我做错了什么?我怎样才能正确地绕两个角?

提前致谢

*抱歉我的英文

2 个答案:

答案 0 :(得分:1)

@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];
}

检查屏幕截图: - > Effect on Table

答案 1 :(得分:0)

最后,我找到了一个解决方案,将uiimageview嵌套在uiview中,在用户定义的运行时属性中设置了角半径,并将此uiview的cliptobounds设置为yes。

如果有人需要进一步解释,我会很高兴