できたもの
コード
import UIKit
final class RoundedSegmentedControl: UISegmentedControl {
private let segmentInset: CGFloat = 5
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = bounds.height / 2.0
let foregroundIndex = numberOfSegments
if subviews.indices.contains(foregroundIndex), let foregroundImageView = subviews[foregroundIndex] as? UIImageView {
foregroundImageView.bounds = foregroundImageView.bounds.insetBy(dx: segmentInset, dy: segmentInset)
foregroundImageView.image = generateImage(color: selectedSegmentTintColor ?? .white)
foregroundImageView.layer.removeAnimation(forKey: "SelectionBounds")
foregroundImageView.layer.masksToBounds = true
foregroundImageView.layer.cornerRadius = foregroundImageView.bounds.height / 2.0
}
}
private func generateImage(color: UIColor) -> UIImage? {
let size = CGSize(width: 1, height: 1)
let rect = CGRect(origin: .zero, size: size)
let renderer = UIGraphicsImageRenderer(bounds: rect)
return renderer.image { context in
context.cgContext.setFillColor(color.cgColor)
context.fill(rect)
}
}
}
参考にしたサイト
https://stackoverflow.com/a/60661794/17132714