【Swift】UIButton을 setTitle했을 때의 깜박임을 없애

소개



다음과 같이 UIButton을 setTitle했을 때 일순간 깜박입니다. 이것을 원활하게 바꾸는 방법을 소개합니다.

깜박임 있음


깜박임 없음


구현



우선, 깜박임을 없애기 전의 코드가 이쪽입니다. 
enum ButtonType {
    case a
    case b
    var text: String {
        switch self {
            case .a: return "AAAAA"
            case .b: return "BBBBB"
        }
    }
    mutating func change() {
        switch self {
            case .a: self = .b
            case .b: self = .a
        }
    }
}

final class ViewController: UIViewController {

    @IBOutlet private weak var button: UIButton!
    private var buttonType: ButtonType = .b

    @IBAction private func buttonDidTapped(_ sender: Any) {
        button.setTitle(buttonType.text, for: .normal)
        buttonType.change()
    }

}

그리고 깜박임을 없애는 코드가 여기입니다.
enum ButtonType {
    case a
    case b
    var text: String {
        switch self {
            case .a: return "AAAAA"
            case .b: return "BBBBB"
        }
    }
    mutating func change() {
        switch self {
            case .a: self = .b
            case .b: self = .a
        }
    }
}

final class ViewController: UIViewController {

    @IBOutlet private weak var button: UIButton!
    private var buttonType: ButtonType = .b

    @IBAction private func buttonDidTapped(_ sender: Any) {
        UIView.setAnimationsEnabled(false)
        button.setTitle(buttonType.text, for: .normal)
        buttonType.change()
        button.layoutIfNeeded()
        UIView.setAnimationsEnabled(true)
    }

}

포인트는 이하군요.
버튼의 제목을 변경하기 전에 애니메이션을 멈추고 깜박임을 제거합니다. 그리고, 버튼에 대해서 layoutIfNeeded 를 해 주는 것으로, 깜박임이 없어집니다. (이것을 쓰지 않으면 깜박입니다) 그리고 마지막으로 애니메이션을 다시 시작합니다.
UIView.setAnimationsEnabled(false)
button.setTitle(buttonType.text, for: .normal)
buttonType.change()
button.layoutIfNeeded()
UIView.setAnimationsEnabled(true)

결론



끝입니다.

좋은 웹페이지 즐겨찾기