개발...................../TIL

Swift 버튼을 눌러 연속적으로 이미지 바꾸기(.toggle 활용)

bluewiper 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.
    }
}

 

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