이놈의 티스토리는 사진 못올리는 버그를 아직도 수정하지 못했나보다. 아직도 사진이 올라가지 못한다. 

이렇게 블로그 포스팅을 못한다고 공부를 안할 수는 없다는 생각에 일단 전광판 앱을 다 만들어봤다. 

 

[SettingViewController]

import UIKit

protocol LEDBoardSettingDelegate: AnyObject {
    func changedSetting(text: String?, textColor: UIColor, backgroundColor: UIColor)
}

class SettingViewController: UIViewController {

    @IBOutlet weak var orangeButton: UIButton!
    @IBOutlet weak var blueButton: UIButton!
    @IBOutlet weak var blackButton: UIButton!
    @IBOutlet weak var greenButton: UIButton!
    @IBOutlet weak var purpleButton: UIButton!
    @IBOutlet weak var yellowButton: UIButton!
    @IBOutlet weak var textField: UITextField!
    
    weak var delegate: LEDBoardSettingDelegate?
    var ledText: String?
    var textColor: UIColor = .yellow
    var backgroundColor: UIColor = .black
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.configureView()
    }
    
    private func configureView(){
        if let ledText = self.ledText{
            self.textField.text = ledText
        }
        self.changeTextColor(color: self.textColor)
        self.changeBackgroundColorButton(color: self.backgroundColor)
    }

    @IBAction func tabTextColorButton(_ sender: UIButton) {
        if sender == self.yellowButton {
            self.changeTextColor(color: .yellow)
            self.textColor = .yellow
        }else if sender == self.purpleButton{
            self.changeTextColor(color: .purple)
            self.textColor = .purple
        }else{
            self.changeTextColor(color: .green)
            self.textColor = .green
        }
    }
    
    @IBAction func tabBackgroundColorButton(_ sender: UIButton) {
        if sender == self.blackButton{
            self.changeBackgroundColorButton(color: .black)
            self.backgroundColor = .black
        }else if sender == self.blueButton{
            self.changeBackgroundColorButton(color: .blue)
            self.backgroundColor = .blue
        }else{
            self.changeBackgroundColorButton(color: .orange)
            self.backgroundColor = .orange
        }
    }
    
    @IBAction func tabSaveButton(_ sender: Any) {
        self.delegate?.changedSetting(
            text: self.textField.text,
            textColor: self.textColor,
            backgroundColor: self.backgroundColor)
        self.navigationController?.popViewController(animated: true)
    }
    
    private func changeTextColor(color : UIColor){
        self.yellowButton.alpha = color == UIColor.yellow ? 1 : 0.2
        self.purpleButton.alpha = color == UIColor.purple ? 1 : 0.2
        self.greenButton.alpha = color == UIColor.green ? 1 : 0.2
    }
    private func changeBackgroundColorButton(color:UIColor){
        self.blackButton.alpha = color == UIColor.black ? 1 : 0.2
        self.blueButton.alpha = color == UIColor.blue ? 1 : 0.2
        self.orangeButton.alpha = color == UIColor.orange ? 1 : 0.2
    }
}

[ViewController]

import UIKit

class ViewController: UIViewController, LEDBoardSettingDelegate {

    @IBOutlet weak var contentsLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        self.contentsLabel.textColor = .yellow
    }
    override func prepare(for segue:UIStoryboardSegue, sender: Any?){
        if let settingViewController = segue.destination as? SettingViewController{
            settingViewController.delegate = self
            settingViewController.ledText = self.contentsLabel.text
            settingViewController.textColor = self.contentsLabel.textColor
            settingViewController.backgroundColor = self.view.backgroundColor ?? .black
        }
    }
    func changedSetting(text: String?, textColor: UIColor, backgroundColor: UIColor) {
        if let text = text{
            self.contentsLabel.text = text
        }
        self.contentsLabel.textColor = textColor
        self.view.backgroundColor = backgroundColor
    }
}

크게 이렇게 두 가지로 코드를 나눌 수 있을 것 같다. 

사진이 안올려져셔 어떻게 완성본을 보여줄 방법은 없지만, 이렇게 코드라도 남길 수 있으면...

 

이번 프로젝트는 뭔가 엄청 쉬워보일 것 같았는데 어려웠다. 핵심 기능이라 한다면

1.  앱 내에서 페이지를 왔다갔다 하는 방법

2. 페이지끼리 데이터를 주고받는 방법

3. 간단한 UI 구성 방법

정도로 나눌 수 있을 것 같다. 일단 기억에 남는 건 이정도이지만, 사실 이 중에 완벽하게 이해한 것은 하나도 없다. 그냥 인강을 따라했을 뿐...이제 이 3가지 요소를 집중적으로 따로 공부해서 이 프로젝트의 코드를 복습해야겠다.

원래 이런 느낌으로 산 인강이긴 하다. '일단 따라해보고 모르는 건 내가 따로 공부하자'가 원래 이 강의를 샀을 때의 내 마인드였지만 이렇게까지 이해를 못할 줄은 몰랐다. 

+ Recent posts