728x90
Navigation App 구현 하기
네비게이션 컨트롤러 앱을 구현하였습니다.
동작 화면은 '메인화면'과 '수정화면'이며
메인화면/수정화면 에서 입력한 message를 그대로 전달 & 버튼을 이용한 이미지 전환 및 사이즈 조절을 구현하였습니다.
결과 화면
코드 & 설명
ViewController - 메인화면
import UIKit
class ViewController: UIViewController, EditDelegate {
// 전구 이미지
let imgOn = UIImage(named: "lamp_on.png")
let imgOff = UIImage(named: "lamp_off.png")
var isOn = true
var isZoom = false
var orgZoom = false
//메인화면 -> 수정화면 데이터 전달
@IBOutlet var txMessage: UITextField!
@IBOutlet var imgView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
imgView.image = imgOn
}
//prepare 함수 : 해당 세그웨이가 해당 뷰컨트롤러로 전환되기 직전에 호출되는 함수이며 데이터 전달을 위해 사용된다
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let editViewController = segue.destination as! EditViewController
if segue.identifier == "editButton" { //버튼을 클릭 한 경우
editViewController.textWayValue = "segue : use button"
}else if segue.identifier == "editBarButton"{ //바 버튼을 클릭한 경우
editViewController.textWayValue = "segue : use Bar button"
}
editViewController.textMessage = txMessage.text! // 메인화면의 데이터 -> 수정화면으로 전달
editViewController.isOn = isOn // '수정화면'의 isOn에 '메인화면'의 상태를 전달
editViewController.isZoom = orgZoom
editViewController.delegate = self
}
func didMessageEditDone(_ controller: EditViewController, message: String) {
txMessage.text = message
}
//'수정화면'의 스위치 값을 '메인화면'에 전달하여 켜진 전구 또는 꺼진 전구를 보여준다
func didImageOnOffDone(_ controller: EditViewController, isOn: Bool) {
if isOn {
imgView.image = imgOn
self.isOn = true
} else {
imgView.image = imgOff
self.isOn = false
}
}
func didImageZoomDone(_ controller: EditViewController, isZoom: Bool) {
let scale: CGFloat = 2.0
var newWide: CGFloat, newHeight: CGFloat
if isZoom {
if orgZoom {
} else {
self.isZoom = false
self.orgZoom = true
newWide = imgView.frame.width*scale
newHeight = imgView.frame.height*scale
imgView.frame.size = CGSize(width: newWide, height: newHeight)
}
print("Zoom: true")
} else {
if orgZoom {
self.isZoom = true
self.orgZoom = false
newWide = imgView.frame.width/scale
newHeight = imgView.frame.height/scale
imgView.frame.size = CGSize(width: newWide, height: newHeight)
} else {
}
print("Zoom: false")
}
}
}
EditViewController - 수정 화면
import UIKit
protocol EditDelegate {
func didMessageEditDone(_ controller: EditViewController, message: String)
func didImageOnOffDone(_ controller: EditViewController, isOn: Bool) //'수정화면'의 스위치 상태를 '메인화면'으로 보내기 위한 델리게이트에 추가
func didImageZoomDone(_ controller: EditViewController, isZoom: Bool)
}
class EditViewController: UIViewController {
//Do any additional setup after
//레이블의 텍스트를 직접 제어할 수 없기 때문에 문자열 변수 만든다 , 그리고 viewDidLoad 함수에서 변수 textWayValue값을 레이블의 텍스트로 대입하여 레이블에 출력 되게 한다
var textWayValue: String = "" //'수정화면에서' 직접 텍스트 필드의 텍스트 제어 할 수 없기 때문에 문자열 만든다
var textMessage: String = ""
var delegate: EditDelegate? //delegate 변수 생성
var isOn = false //수정화면에서 직접 제어 할 수 없기 때문에 변수 isOn 만든다
var isZoom = false
@IBOutlet var txMessage: UITextField!
@IBOutlet var lblWay: UILabel!
@IBOutlet var swIsOn: UISwitch!
@IBOutlet var btnResize: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
lblWay.text = textWayValue
txMessage.text = textMessage
swIsOn.isOn = isOn //변수 isOn값 스위치에 On 대입해서 꺼져 있는 모습
if isZoom {
btnResize.setTitle("축소", for: UIControl.State())
} else {
btnResize.setTitle("확대", for: UIControl.State())
}
}
//'수정화면'의 btnDone함수에서 didMessageEditDone을 호추하면서 '수정화면'의 텍스트 필드 내용을 메시지 문자열로 전달(수정화면 -> 메인) 데이터 이동
// btnDone(완료) 버튼 누르면 수정화면의 스위치 상태를 isOn으로 전달한다. 즉 , '수정화면의' 스위치 상태를 '메인화면'으로 전달
@IBAction func btnDone(_ sender: UIButton)
{
if delegate != nil {
delegate?.didMessageEditDone(self, message: txMessage.text!)
delegate?.didImageOnOffDone(self, isOn: isOn)
delegate?.didImageZoomDone(self, isZoom: isZoom)
}
_ = navigationController?.popViewController(animated: true)
}
// 전구를 제어하기위한 함수
// 스위치 함수
@IBAction func swImageOnOff(_ sender: UISwitch) {
if sender.isOn {
isOn = true
} else {
isOn = false
}
}
@IBAction func btnResizeImage(_ sender: UIButton) {
if isZoom {
isZoom = false
btnResize.setTitle("확대", for: UIControl.State())
} else {
isZoom = true
btnResize.setTitle("축소", for: UIControl.State())
}
}
}
전체 코드
출처 : Do it 스위프트로 앱 만들기
728x90
'Mobile Platform > IOS' 카테고리의 다른 글
[IOS] Do it (12) 음악 재생 및 녹음 App 구현하기 (0) | 2020.09.15 |
---|---|
[IOS] Do it (11) ToDo App 구현 - 테이블 뷰 컨트롤러 이용 (0) | 2020.09.03 |
[IOS] Do it(9) TabVar Controller App 구현 (0) | 2020.07.25 |
[IOS] Do it(8) 페이지 이동 앱 (Image Contorl이용) (0) | 2020.07.25 |
[IOS] Do it(7) Map 구현 하기 (0) | 2020.07.23 |