* 개발 공부용으로 비상업적 목적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에 하드코딩 안하기로 했지만 복습차원에서 써보기 |
ㄴ 일단 하드코딩 구현 후, 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)
}
}
'iOS' 카테고리의 다른 글
[Xcode] PickerView, TableView, reuse 정리 (0) | 2024.09.03 |
---|---|
[Xcode] UIView - Protocol, Delegate 정리 (0) | 2024.09.01 |
[Xcode] UIView 정리 (0) | 2024.08.29 |
java와 swift의 차이점, 특징, 문법 (0) | 2024.08.21 |
intro (0) | 2024.08.20 |