【发布时间】:2022-01-12 01:55:51
【问题描述】:
由于自动布局功能,我尝试使用 UIImage 圆角半径而不是 UIImageView。照片太大时圆角半径太细,比如4k x 4k,但是当照片很小,比如500 x 500时,圆角半径太大。不管照片大小,我都希望圆角半径为25。您有什么建议吗?
我从中尝试了以下代码,但它并没有解决我的问题。: https://newbedev.com/how-to-set-corner-radius-to-uiimage-not-uiimageview-in-ios-swift
我的目标是让圆角半径等于任何照片的大小。我测试了图像名称“demo”为4,000 x 4,000,圆角半径为5,“demo2”为500 x 500,圆角半径为50。
这是我的完整代码:
class TheCountdownDetails: UIViewController {
let photoPreview = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
photoPreview.translatesAutoresizingMaskIntoConstraints = false
photoPreview.contentMode = .scaleAspectFit
view.addSubview(photoPreview)
photoPreview.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
photoPreview.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
photoPreview.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20).isActive = true
photoPreview.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true
}
override func viewDidLayoutSubviews() {
photoPreview.image = UIImage(named: "demo")?.withRoundedCorners(radius: 25)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
}
}
extension UIImage {
public func withRoundedCorners(radius: CGFloat? = nil) -> UIImage? {
let maxRadius = min(size.width, size.height) / 2
let cornerRadius: CGFloat
if let radius = radius, radius > 0 && radius <= maxRadius {
cornerRadius = radius
} else {
cornerRadius = maxRadius
}
UIGraphicsBeginImageContextWithOptions(size, false, scale)
let rect = CGRect(origin: .zero, size: size)
UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius).addClip()
draw(in: rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
【问题讨论】:
标签: ios swift uiimageview uiimage cornerradius