文字っぽいの。

文字を書いています。写真も混ざります。

UISegmentedControlを角丸にする

できたもの

f:id:FromAtom:20220404230101g:plain

コード

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