iOS/Swift

[ Swift ] ๊ฐ„๋‹จํ•œ ํ† ์ŠคํŠธ ๋ฉ”์„ธ์ง€ ๊ตฌํ˜„ํ•˜๊ธฐ (feat.UILabel)

๊ฒฝํ‘ธ 2022. 9. 16. 18:30
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”~

 

์ •๋ง ์˜ค๋ž˜๊ฐ„๋งŒ์— ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์„ ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ค๋Š˜์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ† ์ŠคํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ 

์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : )

 

1. UILabel ์ปค์Šคํ…€ํ•˜๊ธฐ

์ถœ์ฒ˜: Apple Developer

 

drawText(in:)์€ Label์˜ text๊ฐ€ ๊ทธ๋ ค์งˆ ๋•Œ

rect์— ๊ด€ํ•œ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋กœ Override ํ•ด์„œ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

์ด๋•Œ, drawText(in:)์—์„œ padding๊ฐ’์„ ์„ค์ •ํ•˜์‹œ๊ฒŒ ๋˜๋ฉด ๋ฌธ์ž์™€ Label ์‚ฌ์ด์— ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ณ  

ํ† ์ŠคํŠธ ๋ฉ”์„ธ์ง€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

final class ToastLabel: UILabel {
    
    // ์ƒํ•˜์ขŒ์šฐ์˜ ์–ผ๋งˆ์˜ ํŒจ๋”ฉ๊ฐ’์„ ์ค„์ง€ UIEdgeInsets ๋ณ€์ˆ˜ ์ƒ์„ฑ
    private var padding = UIEdgeInsets(top: 8.0, left: 8.0, bottom: 8.0, right: 8.0)
    
    // intrinsicContentSize ์žฌ์ •์˜ ํ›„ ์‚ฌ์šฉ
    override var intrinsicContentSize: CGSize {
        var contentSize = super.intrinsicContentSize
        contentSize.height += padding.top + padding.bottom
        contentSize.width += padding.left + padding.right

        return contentSize
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setToastLabel()
    }
    
    // ์•ž์„œ ๋งํ–ˆ๋˜ drawText Override!
    override func drawText(in rect: CGRect) {
        super.drawText(in: rect.inset(by: padding))
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func setToastLabel() {
        // Text
        numberOfLines = 0
        textColor = .white
        textAlignment = .center
        // View
        backgroundColor = .black
        layer.cornerRadius = 10
        layer.masksToBounds = true
    }
}

 

2. Extension ์‚ฌ์šฉํ•˜๊ธฐ 

์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋“ค์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

extension UIViewController {

    func showToast(message: String) {
        let toastMessage = ToastLabel() // ์•ž์„œ ๋งŒ๋“ค์—ˆ๋˜ Custom Label
        toastMessage.text = message

        view.addSubview(toastMessage)
        toastMessage.snp.makeConstraints { make in
            make.width.lessThanOrEqualTo(UIScreen.main.bounds.width * 0.75)
            make.center.equalToSuperview()
        }

        UIView.animate(withDuration: 2, delay: 0, options: .curveEaseInOut) {
            toastMessage.alpha = 0
        } completion: { _ in
            toastMessage.removeFromSuperview()
        }
    }
}

 

 

3. ํŒจ๋”ฉ ์ ์šฉ ์ „ ๋ชจ์Šต

 

4. ํŒจ๋”ฉ ์ ์šฉ ํ›„ ๋ชจ์Šต

 

 

๊ฐœ์ธ ํ”„๋กœ์ ํŠธํ•˜์‹ค ๋•Œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ† ์ŠคํŠธ ๋ฉ”์‹œ์ง€ ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด๋งŒ ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป

๋ฐ˜์‘ํ˜•