ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift 버튼을 눌러 연속적으로 이미지 바꾸기(.toggle 활용)
    개발...................../TIL 2024. 6. 21. 18:50

    나는 원한다.

    내가 에셋으로 저장한 이미지(image1, image2)가 버튼을 누를 때마다 변경되면 좋겠어요~

     

     if-else

    만약에 imagaView의 이미지가 image1이면 버튼을 눌렀을 때 image2가 나온다. 아니라면, image1이 나와야 하니까. 

     

    변수 선언부터 할게요

     private var isImage1Displayed = true // 현재 표시된 이미지가 image1인지 여부를 저장하는 변수

     

    왜냐? 

     

    • 상태 추적: 이미지가 현재 image1인지 image2인지 알기 위해 변수가 필요하다. 이렇게 하면 버튼을 눌렀을 때 현재 상태를 확인하고, 그에 따라 이미지를 변경할 수 있다. 
    • 토글 로직: isImage1Displayed 변수를 사용하면 간단한 if-else 문으로 이미지를 토글(.toggle)할 수 있다. 

     

     

    그런데 여기까지만 하면 일회용밖에 안 된다. image1에서 image2 변경이 한 번만 가능하다. 

     

     

    .toggle

    .toggle() 메서드는 Swift 표준 라이브러리에서 Bool 타입에 제공되는 메서드이다. 이 메서드는 Bool 값을 현재 값의 반대로 바꾸는 기능을 제공한다. 즉, true이면 false로, false이면 true로 바꾼다. 

     

            // 이미지 상태 토글
            isImage1Displayed.toggle()

     

    위에서 isImage1Displayed 변수를 먼저 선언해야 했던 이유 중 하나이다.  

     

    기억 나요..? 우리 Bool타입 변수 선언 했잖아..

     private var isImage1Displayed = true // 현재 표시된 이미지가 image1인지 여부를 저장하는 변수

     

    안 쓸 수 있는 방법도 있는데 

    그 경우 if문에서 이미지 이름을 비교하는 등의 방식으로 상태를 확인해야 하므로 코드가 복잡해질 수 있다. 

    물론,,,,,이번 과제의 경우는 아니지만,,,,,ㅎ

     

    import UIKit
    
    
    class ViewController: UIViewController {
       
        private var isImage1Displayed = true // 현재 표시된 이미지가 image1인지 여부를 저장하는 변수
    
        @IBOutlet weak var imageView: UIImageView!
        @IBOutlet weak var button: UIButton!
        
        @IBAction func buttonAction(_ sender: Any) {
    
            //버튼 색상 변경
            self.button.tintColor = .green
            
            //사진1, 사진2 순차적으로 변경
            if isImage1Displayed {
                self.imageView.image = UIImage(named: "image2")
            } else {
                self.imageView.image = UIImage(named: "image1")
            }
            
            // 이미지 상태 토글
            isImage1Displayed.toggle()
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
        }
    }

     

    버튼 관련된 메서드는 신경 노노