iOS

[Xcode] UIView 복습

Mary's log 2024. 9. 1. 02:38

* 개발 공부용으로 비상업적 목적X

* 배운대로 복습하고 추가변경하고픈게 있으면 점차...

 

< 대충 내 맘대로 설계... >

ㄴ레드벨벳 멤버들의 이미지, 이름, 생년월일  조회

ㄴ오브젝트 대충...

UISwitch on 대표 로고 / off 뭐하지 그냥 전부 지우거나 비활성화
 
UISegment 멤버 수만큼. 나이순으로 예명. 선택 시 해당 멤버 정보 표시   
UIButton 좌우. SF Symbols 사용. 각 끝 idx면 버튼 비활. 1장 씩 왔다갔다 함수.
UISlider 데뷔년도~현재년도. 년도에 맞춰 하단에 발매앨범명&타이틀명 표시
UIStepper 시작 0부터 100. 인스타 마음 누르듯 '1 ❤️' 숫자 증가.
   
UITextField Switch가 off일 때 특정 입력값(러비)여야만 Switch 활성화?
Switch off 면 전부 지워지고 disabled되면서 textField 다시 보이게 할 수 잇으려나
   
* MVC 패턴을 위해서 Controller에 하드코딩 안하기로 했지만
복습차원에서 써보기
* Protocol, Delegate는 다음 복습 때

 

ㄴ 일단 하드코딩 구현 후, Refactoring으로 공통함수 생성.

ㄴ 깃헙?

ㄴ 아 일이 커진다...

 

< 프로젝트 안에 넣고 쓸 데이터 수집 >

* 그룹 로고 1개는 Assets\AppIcon에 1개 넣고

단체 사진 1장, 프로필사진 모아서 아래 rvImg이름대로 수정하고 Assets\3x로 넣기

 

let rvImg = ["rv1", "rv2", "rv3", "rv4", "rv5"]

let rvNm = ["irene", "seulgi", "wendy", "joy", "yeri"]

let rvBirth = ["91.03.29", "94.02.10","94.02.21","96.09.03","99.03.05"]

// 일단 위까지만 먼저 구현

 

let rvAlbum = [ 정규? 미니까지?]

let rvTitle = []


Xcode

 

Directory

/User/abc123/Swift/RedVelvet


 

- 일단 스토리보드에서 Object들 추가

( switch off 기능 - textField는 기본 옵젝 구현해내고 나중에... )

  • Switch
  • Image View
  • Label
  • Filled Button
  • Page Control
  • Segmented Control
  • Pull down Button *
  • Progress View *
  • Stepper

넣다보니 설계에도 없던 게 욕심 그득그득

 

 

 

 

 - 정말 날 것의 하드코딩;

1) 얼추 구현했는데 progress.setProgress(Float) 값 줄 때 Stepper랑 맞추고 싶은데 아직 잘 안됨.

2) 선택 옵션으로 앨범 선택 가능하게...

3) 위까지만 구현 하고, Refactoring하기

import UIKit

class ViewController: UIViewController {

    let rvImg = ["rv1", "rv2", "rv3", "rv4", "rv5"]
    let rvNm = ["irene", "seulgi", "wendy", "joy", "yeri"]
    let rvBirth = ["91.03.29", "94.02.10","94.02.21","96.09.03","99.03.05"]
    
    var rvIdx = 0

    @IBOutlet weak var switch1: UISwitch!
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var btnLeft: UIButton!
    @IBOutlet weak var btnRight: UIButton!
    @IBOutlet weak var pageControl: UIPageControl!
    @IBOutlet weak var segmentControl: UISegmentedControl!
    @IBOutlet weak var slider: UISlider!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var status: UIProgressView!
    @IBOutlet weak var stepper: UIStepper!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        switch1.isOn = false
        imageView.image = UIImage(named: "reveluv")
        label1.text = "ReVeLuv"
        btnLeft.isEnabled = false
        btnRight.isEnabled = false
        label1.numberOfLines = 2
        pageControl.numberOfPages = 0
        pageControl.currentPage = 0


        segmentControl.removeAllSegments()
        for segTitle in rvNm {
            segmentControl.insertSegment(withTitle: segTitle, at: rvIdx, animated: false)
            rvIdx += 1
        }
        rvIdx = 0
        segmentControl.isEnabled = false
        
        
        slider.maximumValue = 33
        slider.minimumValue = 25
        slider.value = 0
        
        label2.text = nil
        
        stepper.maximumValue = 10
        stepper.minimumValue = 0
        stepper.stepValue = 1
        stepper.value = 0
        label3.text = "\(Int(stepper.value)) ❤️"
        
        status.progress = 0.0
        
    }

    @IBAction func actSwitch(_ sender: Any) {
        if switch1.isOn {
            rvIdx = 0
            imageView.image = UIImage(named: "group")
            label1.text = "Happiness!"
            btnRight.isEnabled = true
            pageControl.numberOfPages = rvImg.count
            pageControl.currentPage = rvIdx
            segmentControl.isEnabled = true
        } else {
            rvIdx = 0
            imageView.image = UIImage(named: "reveluv")
            label1.text = "ReVeLuv"
            btnLeft.isEnabled = false
            btnRight.isEnabled = false
            
            pageControl.numberOfPages = 0
            pageControl.currentPage = 0
            segmentControl.isEnabled = false
            segmentControl.selectedSegmentIndex = -1
            
            label2.text = nil
            label3.text = nil
        }
    }
    
    @IBAction func actLeft(_ sender: Any) {
        rvIdx -= 1
        btnLeft.isEnabled = true
        btnRight.isEnabled = true
        imageView.image = UIImage(named: rvImg[rvIdx])
        label1.text = "\(rvNm[rvIdx])\n\(rvBirth[rvIdx])"
        pageControl.currentPage = rvIdx
        if rvIdx == 0 {
            btnLeft.isEnabled = false
        }
        segmentControl.selectedSegmentIndex = -1
    }
    
    @IBAction func actRight(_ sender: Any) {
        rvIdx += 1
        btnLeft.isEnabled = true
        btnRight.isEnabled = true
        imageView.image = UIImage(named: rvImg[rvIdx])
        label1.text = "\(rvNm[rvIdx])\n\(rvBirth[rvIdx])"
        pageControl.currentPage = rvIdx
        
        if rvIdx == rvImg.count - 1 {
            btnRight.isEnabled = false
        }
        segmentControl.selectedSegmentIndex = -1
    }
    
    
    
    @IBAction func actSegmentChanged(_ sender: Any) {
        rvIdx = segmentControl.selectedSegmentIndex
        
        if rvIdx == 0 {
            btnLeft.isEnabled = false
            btnRight.isEnabled = true
        } else if rvIdx == rvImg.count - 1 {
            btnLeft.isEnabled = true
            btnRight.isEnabled = false
        } else {
            btnLeft.isEnabled = true
            btnRight.isEnabled = true
        }
        
        switch segmentControl.selectedSegmentIndex {
        case 0:
            imageView.image = UIImage(named: rvImg[rvIdx])
            label1.text = "\(rvNm[rvIdx])\n\(rvBirth[rvIdx])"
        case 1:
            imageView.image = UIImage(named: rvImg[rvIdx])
            label1.text = "\(rvNm[rvIdx])\n\(rvBirth[rvIdx])"
        case 2:
            imageView.image = UIImage(named: rvImg[rvIdx])
            label1.text = "\(rvNm[rvIdx])\n\(rvBirth[rvIdx])"
        case 3:
            imageView.image = UIImage(named: rvImg[rvIdx])
            label1.text = "\(rvNm[rvIdx])\n\(rvBirth[rvIdx])"
        case 4:
            imageView.image = UIImage(named: rvImg[rvIdx])
            label1.text = "\(rvNm[rvIdx])\n\(rvBirth[rvIdx])"
        default:
            imageView.image = nil
            label1.text = ""
        }
    }
    
    @IBAction func actSliderValueChange(_ sender: Any) {
        label2.text = "멤버들 나이는 \(Int(slider.value))살"
    }
    
    @IBAction func actStepperValueChange(_ sender: Any) {
        label3.text = "\(Int(stepper.value)) ❤️"
        status.setProgress(Float(stepper.value), animated: true)
    }
    
    
}