Swift 4 - 在swift中有两个圆角的imageview?

时间:2018-01-30 10:43:16

标签: swift uiimageview uicollectionview swift4

我在UICollectionView Cell中有一个UIImageView,我想让它的顶角变圆。我无法解决,任何帮助都表示赞赏。

你可以看到单元格的半径为10px,我也希望在图像上应用相同的效果。

Endeksa

4 个答案:

答案 0 :(得分:10)

您可以尝试UIRectCorner Document here

这是我的自定义课程AGRoundCornersView

extension UIImageView {
    public func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
        let maskPath = UIBezierPath(roundedRect: bounds,
                                    byRoundingCorners: corners,
                                    cornerRadii: CGSize(width: radius, height: radius))
        let shape = CAShapeLayer()
        shape.path = maskPath.cgPath
        layer.mask = shape
    }
}

代码:

<强> 1。调整视图大小时调用。

uiimage.roundCorners([.topLeft, .topRight], radius: 10)

<强> 2。创建自定义类

class CustomImageView: UIImageView {
    override func layoutSubviews() {
        super.layoutSubviews()
        self.roundCorners([.topLeft, .topRight], radius: 10)
    }
}

答案 1 :(得分:1)

在您的UICollectionViewCell中尝试此操作

 override func awakeFromNib() {
        super.awakeFromNib()
        DispatchQueue.main.async {
            self.image.roundCorners([.topRight,.topLeft], radius: 8)
            self.image.layer.masksToBounds = true
        }
    }

答案 2 :(得分:0)

感谢AshvinGudaliyaSujewan

以下代码适用于我的收藏单元的ImageView左上角和右上角

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell:TUGBucketCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! TUGBucketCell
        //Rounded corner ImageView
        DispatchQueue.main.async {
            cell.imgVw.roundCorners([.topLeft, .topRight], radius: 10)
            cell.imgVw.layer.masksToBounds = true
        }

        return cell
    }

扩展名是

extension UIImageView {
    public func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
        let maskPath = UIBezierPath(roundedRect: bounds,
                                    byRoundingCorners: corners,
                                    cornerRadii: CGSize(width: radius, height: radius))
        let shape = CAShapeLayer()
        shape.path = maskPath.cgPath
        layer.mask = shape
    }
}

答案 3 :(得分:0)

快捷键5

在您的collectionview单元格中,放入以下两行代码,您就可以开始了。无需编写任何扩展名:

cell._imageView.layer.cornerRadius = 10
cell._imageView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]

此处将应用转角半径 TopLeft和TopRight ,转角和其余转角保持不变。

如果要在 BottomLeft和BottomRight 角中应用拐角半径,则 maskedCorners 应该如下所示:

cell._imageView.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMaxXMaxYCorner]

希望有帮助。