전체 글188 [흡구오디] Swift - Cloud Storage로 사진 업로드/다운로드 하기 | 사진 업로드해서 보여주기 안녕하세요 이제 가을인가봐요겨울이 오기 전에 이 앱을 출시하겠어요!(사유 : 전국방방곳곳 뛰댕겨야함) 오늘은 유저가 흡연구역을 추가할 때 사진을 찍어서 올리고 마커를 탭하면 그 사진 + 흡연구역에 대한 정보를 보여주는 기능을 구현해보았답니다 : ) 사진 업로드/다운로드 과정먼저 과정 설계를 해야겠쥬 파이어스토어는 텍스트/숫자 같은 데이터만 저장할 수 있고, 이미지 저장은 안돼요 🙅그래서 Cloud Storage를 같이 써야 함! 기존 흐름사용자가 입력 폼 적어서 저장 -> firestore에 장소 이름/장소 설명/장소 태그 등을 저장사용자가 마커를 탭하면 -> firestore에 있는 장소 이름/장소 설명/장소 태그 등을 불러와서 보여주기 앞으로는사용자가 사진 찍고, 입력 폼 적어서 저장-> 사진은 .. iOS/흡구오디 -> 어딨쥐 2025. 9. 14. [흡구오디] Swift 사진 찍는 기능 구현하기 | UIImagePickerController 안녕하세요! 오늘은 iOS 앱에서 사진 찍는 기능을 구현하는 법에 대해 알아보겠어요 보통 사진 업로드를 위해서는카메라로 찍기 or 앨범에 있는 사진 사용 일텐데요 제 앱의 경우 앨범 불러오는 기능까지 굳이 구현할 필요 없기 때문에즉석에서 찍은 카메라 샷만 구현하도록 할게요 저는 카메라 버튼을 만들어주고 그 버튼을 누르면 카메라가 실행되도록하였답니다.카메라 버튼 생성-> 버튼 누르면 카메라 실행-> 찍은 사진을 미리보기로 보여주기 카메라 버튼 생성private var areaImage = UIButton().then { $0.setImage(UIImage(systemName: "camera.on.rectangle.fill"), for: .normal) $0.layer.borderWidth = 0.. iOS/흡구오디 -> 어딨쥐 2025. 9. 14. [ReactorKit] 버튼 누르면 숫자가 증가하는 리액터 만들기 안녕하세요 저번 포스팅에서는 리액터를 사용해서 앱을 실행하면 리액터로 상태값을 바꿔 그 상태값을 출력해서 확인해보는 예제를 공부했었어요 이번 시간에는 사용자의 입력에 맞춰 상호작용하는 것을 연습해보기 위해서 버튼을 누르면 카운트가 증가되는 리액터를 만들어봤어요 먼저 Reactor 만들기(수정하기)import RxSwiftimport ReactorKitimport Foundationfinal class ViewReactor: Reactor { //사용자의 행동 enum Action { case buttonTapped } //상태 변화 enum Mutation { case increaseCount } //뷰 상태 struct State { var buttonTapCoun.. iOS/ReactorKit 2025. 9. 11. [ReactorKit] 기본적인 ReactorKit 흐름 만들어보기 안냥하세요 오늘은 리액터킷 기본 틀을 만들ㅇㅓ 보면서 리액터킷을 어떻게 구성하는지, 어떻게 동작하는지 공부해보았어요 기본 흐름은 초기 상태가 false 인 initialState를 만들어줌-> 리액터킷을 만들어 준다음에-> bind() 동작하며 상태 값을 true로 바꿔줌 그리고 우리는 위 동작을 하는 Reactor를 만드는 것을 연습해볼 것임! Reactor 만들기import RxSwiftimport ReactorKitimport Foundationfinal class ViewReactor: Reactor { //사용자의 행동 enum Action { case initialize } //상태 변화 enum Mutation { case setIsInitialized(Bool) }.. iOS/ReactorKit 2025. 9. 11. [ReactorKit] 리액터킷의 기본 개념 안녕하세요 제가 공부하고 있는 리액터킷의 기본 개념을 꼼꼼히 공부하고 이해해보도록해요 아래 내용은 리액터킷 깃의 내용을 한글로 제맘대로 적어놓은 것 입니다~ 이해가 안되는 여러분들에게도 도움이 되면 좋겠네요... 모든 내용은 https://github.com/ReactorKit/ReactorKit/blob/master/README.md ReactorKit/README.md at master · ReactorKit/ReactorKitA library for reactive and unidirectional Swift applications - ReactorKit/ReactorKitgithub.com을 기본으로 합니다! 그럼 시작기본 개념ReactorKit은 Flux와 Reactive Programming의.. iOS/ReactorKit 2025. 9. 10. [ReactorKit] Swift Storyboard 없이 코드로만 앱 만들기 안녕하세요리액터킷 카테고리를 새로 만들었삼 요즘에 리액터킷 공부를 하고 있는데요넘나 어려운 것 그래서 첨부터 차근차근 공부해나가는 모습을 포스팅해보며 복습하려고해요 이 카테고리의 모든 포스팅은 AI가 아닌 제(나 이상지)가 직접 적습니다!!!물론 ai가 도움을 줄순 있음,, 하지만 ai가 줄줄 써준 글은 아님요제 피땀눈물이 들어가있다는거 알아주삼요 그럼 오늘은 꼭 리액터킷만의 과정은 아니지만 스토리보드 없이 프로젝트 구성하는 방법을 알아보아요 스타트 단순히 스토리보드 파일 없앤다고 코드로만 가능한거 아님 1. 스토리 보드 파일 삭제하기main 스토리보드 파일이랑 런치 스크린 파일 삭제 고고 2. Info.plist 에서 main 삭제하기Info.plist에 있는Application Scene Manif.. iOS/ReactorKit 2025. 9. 9. [흡구오디] 지도 위 정보를 띄우는 '바텀 시트' 만들기 (feat. FloatingPanel) 안냐세요바텀시트 완성해 왔서요제가 원하는 기능은 지도 위의 특정 마커를 터치하면 그 장소에 관한 정보를 바텀 시트로 띄워주는 것이었어요도전기1. 커스텀 바텀 시트 구현: 커스텀 해줘야 할거 너무 많아서 포기예를들면 화면을 터치하면 얼만큼 내려오고,마커를 터치하면 얼만큼 올라오고 이런 것들을 다 계산해서 코드로 지정해줘야 해서넘나 복잡한 것기각!2. PanModal 라이브러리 사용: 쉽게 바텀 시트를 구현할 수 있는 유용한 라이브러리 인데요얘는 바텀시트가 올라왔을때 뒤에 화면이 활성화가 안되서 기각저는 바텀 시트 올라온 상태에서도 다른 마커 터치하면 그 마커에 대한 바텀 시트로 바껴야 하거등요3. FloatingPanel 라이브러리 사용: 결론적으로 얘를 사용했구요위에서 말한 제 요구사항을 만족해서 이걸 .. iOS/흡구오디 -> 어딨쥐 2025. 9. 5. OSI 7 계층을 알아보자... 평생 외우고 평생 까먹는 OSI 7계층 공부 고고 1. 물리 계층: 데이터를 0과 1(전기 신호)로 바꿔서 전송- 케이블, 전파, 광섬유 등 실제 매체- 예시 : Ethernet, 허브, RS232 👉 택배를 보내려면 도로와 차량이 필요함도로는 케이블 차량은 전기 신호 물리 계층은 도로와 차량과 같은 존재! 2. 데이터 링크 계층: 같은 네트워크 안에서 안정적인 전송, 오류를 검출하고 수정함- MAC 주소 기반으로 통신- 예시 : Ethernet, PPP, 스위치 👉 택배 상자에 송장 붙이는 단계같은 아파트 단지 내에서는 동호수만 보고 정확히 전달 가능 여기서 송장은 MAC 주소! 정처기 시험 때 MAC 주소 때문에 떨어진거 생각남...흥 ㅠㅠ 3. 네트워크 계층: 다른 네트워크로 데이터 전달, 경로.. STUDY/CS 2025. 9. 1. [흡구오디] 흡연구역 정보를 띄우기 위한 bottomSheet ㅎㅇ여 이번에는 마커를 클릭했을 때 하단의 정보창을 띄우기 위한 과정을 포스팅 해볼게요 찾아보니 이걸 bottomSheet라고 하더라구요? apple 공식 문서에서는 아래와 같은 코드를 제시함func showMyViewControllerInACustomizedSheet() { let viewControllerToPresent = MyViewController() // 1. sheetPresentationController 가져오기 if let sheet = viewControllerToPresent.sheetPresentationController { // 2. detents: 시트 높이 단계 지정 sheet.detents = [.medium.. iOS/흡구오디 -> 어딨쥐 2025. 8. 31. [흡구오디] NMFMapView와 NMFNaverMapView의 차이를 알아보자! 안뇽하세요 저는 지금 네이버 지도 SDK를 이용해서 흡구오디라는 iOS 앱을 개발 중인데요, 네이버 지도 SDK 세계에는 두 가지 지도 객체가 존재한답니다.바로 NMFMapView 와 NMFNaverMapViewNMFMapView vs NMFNaverMapView 차이NMFMapView네이버 지도의 순수 지도 객체지도만 표시됨 (UI 컨트롤 없음)카메라 이동, 마커 표시 같은 “지도 그리기” 기능 제공NMFNaverMapView내부에 NMFMapView를 포함한 컨테이너 뷰기본적으로 네이버 제공 UI 컨트롤 (현재 위치 버튼, 줌 버튼, 로고 등) 같이 제공그래서 self.mapView.mapView 처럼 .mapView 프로퍼티를 통해서 실제 지도(NMFMapView)에 접근해야 함즉,NMFMapVie.. iOS/흡구오디 -> 어딨쥐 2025. 8. 31. [흡구오디] FireStore의 데이터 가져와서 화면에 띄워주기 안냐세요? 오늘은 Firestore에서 document와 data들을 가져와서 지도에 띄워줄거예요 레쯔고 우선 데이터를 입력하고 저장을 해야겠죠?저장하는 부분은 저번 게시글에서 포스팅 했었으니 참고! https://dev-23g.tistory.com/172 그렇담 이제 저장된 데이터들을 가져오자데이터 가져오기// MARK: Area Marker private func smokingAreas() { // 실시간으로 데이터 가져오는 addSnapshotListener 사용 db.collection("smokingAreas").addSnapshotListener { snapshot, error in guard let snapshot = snapshot else { return } .. iOS/흡구오디 -> 어딨쥐 2025. 8. 31. [흡구오디] 어디까지 개발했나 알려드림 | UI 라이브러리 | Firestore 연동 안녕하세요 ^^은근 오랜만에 포스팅하네요 시간이 빠르다 빨라 저는 이번 여름 휴가로 울진, 울산, 제주도를 갔다왔답니다~! 그럼 이제 열심히 공부하고 개발하고 글 써야겠죠...네 레츠고! 글을 안쓴동안 은근 많은 변화가 있었답니다. 개발 내역들1. UI를 라이브러리로 구성함: snapkit, pinlayout, flexlayout 을 활용해서 해당 라이브러리들을 공부하고 적용해보았어요그런데 뭐로 통일할지는 못정함 뭘로 할까요?제 첫인상은 pin이 제일 좋음쓰는게 간편함 2. 흡연구역의 환경 / 유형 / 시설 태그들을 만듦: 각 흡연구역의 이름, 설명 뿐만 아니라 위와 같은 다양한 태그들을 등록할 수 있도록 했어요 아이디어 있으신 분? 공유 부탁 흡연자분들께서는 저러한 정보가 함께 제공된다면아따 흡구오디 .. iOS/흡구오디 -> 어딨쥐 2025. 8. 29. 이전 1 2 3 4 5 ··· 16 다음