如何解决带有cornerRadius的UIImageView被错误地裁剪
我正在尝试将cornerRadius
添加到UIImageView
,这是一个高度较小(7pt)的矩形。 UIImageView
在右侧被错误地裁剪。
奇怪的是UIImageView
的左侧完美地圆了,但同时右侧又有一个额外的白色区域。有时它还起作用也很奇怪,右上角的圆度取决于UIImageView
的宽度。如果我将宽度设置为少30%,右上角的问题就会消失。
我尝试了什么: 只需通过cornerRadius设置角点即可。
layer.cornerRadius = frame.size.height / 2
clipsToBounds = true
通过“图形”上下文设置角点
func withRoundedCorners(radius: CGFloat,rect: CGRect) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(size,false,0.0)
UIBezierPath(roundedRect: rect,cornerRadius: radius).addClip()
draw(in: rect)
let image = UIGraphicsGetimageFromCurrentimageContext()
UIGraphicsEndImageContext()
return image
}
通过蒙版和路径设置角点
extension UIImageView {
func roundCornersForAspectFit(radius: CGFloat) {
if let image = self.image {
// calculate drawingRect
let boundsScale = bounds.size.width / bounds.size.height
let imageScale = image.size.width / image.size.height
var drawingRect: CGRect = bounds
if boundsScale > imageScale {
drawingRect.size.width = drawingRect.size.height * imageScale
drawingRect.origin.x = (bounds.size.width - drawingRect.size.width) / 2
} else {
drawingRect.size.height = drawingRect.size.width / imageScale
drawingRect.origin.y = (bounds.size.height - drawingRect.size.height) / 2
}
let path = UIBezierPath(roundedRect: drawingRect,cornerRadius: radius)
let mask = CAShapeLayer()
mask.path = path.cgPath
layer.mask = mask
}
}
}
播放了不同类型的图像contentMode
.scaleAspectFill
or
.scaleAspectFit
or
.scaletoFill
结果总是一样的。
此外,如果我从UIImageView
中删除图像,而只是将backgroundColor
设置为某种随机颜色以对其进行测试,则右侧的圆角效果会很好。
那会是什么?
解决方法
您可以将此扩展添加到您的项目中
import Foundation
import UIKit
extension UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
@IBInspectable
var borderWidth: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
}
}
@IBInspectable
var borderColor: UIColor? {
get {
let color = UIColor(cgColor: layer.borderColor!)
return color
}
set {
layer.borderColor = newValue?.cgColor
}
}
}
然后您可以将其添加到viewController中,并且可以将.cornerRadius
应用于按钮,标签,imageViews等
imageViewCountryImage.cornerRadius = 15
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。