하이염
요즘 현생이 바빠 포스팅을 등한시했네요
그리고 앱 만드는거 넘 잼써서 자꾸 글 안쓰고 폭풍 업뎃 ㅎ
봐주세요
(포스팅을 등한시한 거 봐달라는 뜻,
제발 내 글 좀 봐달라는 뜻)
아무튼 시작해볼게요
마지막 글은 추가 버튼 올리기 까지 작성했네요
글은 많이 못썼지만 그간 많은 업뎃을 했답니다 ㅋ
1. 흡연구역 추가 기능 구현
초기 기획은 홈 화면에서 추가 버튼을 누르면 같은 화면 내에서 마커 추가하는 것이었지만,
제목, 설명까지 추가하기 위해서는 다른 화면으로 아예 전환해서 추가 받는 것이 맞다고 생각해서!
AddSmokeAreaViewController를 추가했어요
근데 님들하 저 고민이 있어요.
흡연구역이 영어로 SmokeArea가 아니라 SmokingArea더라구요 ㅎ 이걸 어쩐담;;;
대참사의 시작인가요...
1-1. 화면 전환
내가 처음에 헤맨! 화면 전환 방법
루트 폴더에서 New File을 추가한다
> Cocoa Touch Class로 추가 (스위프트로 해도 되긴하는데 이거로 하는게 틀을 잡아줘서 편함!)
> 스토리보드에서도 동명의 뷰컨 추가
>
이렇게 클래스 이름하고 스토리보드ID도 동명으로 설정!
> 화면 전환 코드 구현
@IBAction func addMarkerButtonTapped(_ sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if let addVC = storyboard.instantiateViewController(withIdentifier: "AddSmokeAreaViewController") as? AddSmokeAreaViewController {
addVC.modalPresentationStyle = .fullScreen // 화면 전체로 표시 (선택 사항)
present(addVC, animated: true, completion: nil)
} else {
print("AddSmokeAreaViewController를 찾을 수 없음")
}
}
전 이렇게 햇서염
복붙해서 사용 고고
이럼 끗~!
아 화면 전환은 이게 끝이고
1-2. 화면 구성
화면은 이렇게 구성해봤어요
구현은 스토리보드로!
화면 구성 잡느라 고생 좀 함요...
포함된 기능으로는
뒤로가기 버튼
: 홈 화면으로 돌아감
SearchBar
: 이건 아직 기능 구현 안했지만 주소 검색하면 지도 화면 그곳으로 이동하게 할 것임
마커 이미지
: 제가 만들어서 에셋으로 추가했어요 헤헤
화면 중앙에 고정되어 있어서
사용자가 마커 추가를 위해 지도를 이리저리 움직이면
원하는 위치에 마커를 찍을 수 있게!
제목
: 흡연구역의 타이틀, 텍스트필드로 만듦
상세 설명
: 자세한 설명, 텍필만2
추가하기
: 버튼 누르면 마커의 위치가 앱에 저장되고 홈화면에서 새로운 마커로 뜨게 됨~
그럼 이제 각 기능별로 구현한 것 설명 고고
1-3 뒤로가기 버튼 구현
이건 쉬워요
@IBAction func backButtonTapped(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
dimiss로 해주면 됨
1-4 마커 이미지 구현
마커 이미지는 스토리보드로 지도 화면 중앙에 배치
(마커가 제목이랑 같이 표시되어 추가하려던 위치보다 살짝 높게 저장되니까
사용자가 추가할 마커의 위치도 정중앙에서 살짝 위로 배치함 후후)
1-5 제목, 상세설명 구현
@IBAction func confirmLocationTapped(_ sender: UIButton) {
let currentCenter = naverMapView.mapView.cameraPosition.target
guard let title = titleTextField.text, !title.isEmpty else {
showAlert(message: "제목을 입력해주세요.") {
// 빈 제목 입력 시 처리
}
return
}
// 플레이스홀더와 실제 텍스트 구분
let description = descriptionTextField.text == placeholderText ? "" : descriptionTextField.text
// 새로운 흡연구역 데이터 생성
let newSmokingArea = SmokingArea(name: title, latitude: currentCenter.lat, longitude: currentCenter.lng, description: description ?? "")
// 새로운 흡연구역을 SmokingAreaData에 추가
var updatedSmokingAreas = smokingAreas
updatedSmokingAreas.append(newSmokingArea)
smokingAreas = updatedSmokingAreas
// NotificationCenter로 데이터 전달
NotificationCenter.default.post(name: .smokingAreaAdded, object: nil, userInfo: ["area": newSmokingArea])
showAlert(message: "새로운 흡연구역이 등록되었습니다!") {
self.dismiss(animated: true, completion: nil)
}
}
코드 폭탄
100% 이해되진 않아서 다음 포스팅에선 이 코드들 문법 설명해야쥥
1-6 추가하기 구현
private func showAlert(message: String, completion: @escaping () -> Void) {
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "확인", style: .default, handler: { _ in
completion()
}))
present(alert, animated: true, completion: nil)
}
추가하기 버튼을 누르면
위 코드에 이어 요래 Alert창을 띄워서 사용자에게 알려주고 dismiss 로 홈화면으로 빠져나와 주기
2. 구현 화면
그렇게~~~
지금까지의 구현 화면!!!
완저니 뿌듯하다잉...
다음은 목록 화면 구현으로 고고싱이
'STUDY > iOS' 카테고리의 다른 글
[Swift] MVC 디자인 패턴을 아라보자 (0) | 2025.02.09 |
---|---|
[iOS] xcode에 firebase 연결하기 (1) | 2025.01.22 |
[흡구오디] 내가 만들고 싶은 앱을 설명해봐요 (1) | 2024.12.26 |
[앱 만들기] 지도 위에 버튼 올리기 (0) | 2024.12.26 |
[앱 만들기] 지도 첫 화면 지정 | 사용자 위치 권한 요청하고 처리하기 (0) | 2024.12.24 |