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

Posted

技术标签:

【中文标题】图像视图中的选择性圆角 - iOS【英文标题】:Selective round corners in image view - iOS 【发布时间】:2015-02-24 10:30:58 【问题描述】:

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

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

提前致谢

*对不起我的英语

【问题讨论】:

Round some corners of UIView and round the view’s layer’s border too的可能重复 感谢您的建议,但相关帖子使用相同的代码来圆角,只需添加一个笔划(我不需要),并且以相同的方式工作:只是将顶部四舍五入-左角。 【参考方案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];

查看屏幕截图 :->

【讨论】:

感谢您的帮助!不幸的是,它以前的工作方式相同......测试代码,我意识到它只适用于左上角,如果我尝试舍入任何其他它什么都不做。我完全迷路了 我已经看到您的代码在 uiviewcontroller 中工作,但我正在使用 uitableviewcontroller 并且当它不起作用时。您是否在 uitableview 的单元格内的 uiimageview 中尝试过?我认为问题出在 uitableview 是的,它在 UITableView 中运行良好。cell.Img_thumb=(UIImageView *)[self roundCornersOnView: cell.Img_thumb onTopLeft:YES topRight:YES bottomLeft:NO bottomRight:NO radius:20.0 ]; @jcmartinac,我有更新我的代码,你可以看到这个。 您好,再次感谢!我一直在寻找解决方案,并决定附加一个简单的项目,以通过舍入占据表格中单元格整个宽度的 UIImageView 的顶角来清楚地看到我的问题。当我应用代码来执行此操作时,图像会丢失屏幕宽度,并且对我不起作用。通过这个例子,我希望有人可以帮助我。 dropbox.com/s/w9i3ye2wb2ck0ef/roundcorners.zip?dl=0【参考方案2】:

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

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

【讨论】:

以上是关于图像视图中的选择性圆角 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中的自定义圆角图像视图中设置图像

将图像设置为库中的图像视图,而不从图像库中选择图像

带有圆形图像视图的自定义圆形 UIButton

在 IOS 的集合视图中播种从 ELCImagePicker 中选择的多个图像

如何在android中使用XML布局为图像视图中的图像制作圆角

使用 objectAtIndex:indexPath.row 选择来更改滚动视图图像