[iOS] ViewController의 화면전환 방법 정리

이미지
[iOS] 화면전환 방법 어떤 버튼을 눌러 다른 페이지로 이동 시키는 일은 항상 헷갈립니다. 이번 기회에 정리해 두고 가려고 합니다. 일단 버튼을 하나 만들고 눌러서 내가 원하는 페에지와 실제 페이지가 잘 나타나는지 정리하겠습니다. 이런 버튼이 하나 있고 화면을 전환 해 보도록 하겠습니다. 스토리 보드 가장 쉬운 방법이라고 생각합니다. 내가 액션을 줄 컴포넌트를 클릭하고 컨트롤 + 드래그로 원하는 페이지에 드롭합니다. 선이 생기면서 어떻게 보여줄 것인지 segue action을 선택하면 됩니다. 일단은 present modally를 선택합니다. 버튼을 누르면 모달 창이 새로 생기죠? 아주 쉽고 간편하답니다! viewController present @IBAction func buttonClick(_ sender: Any) { let viewControllerName = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewID") if let view = viewControllerName { self.present(view, animated: true, completion: nil) } } 다음과 같은 코드를 작성해줍니다. 스토리 보드에 만들어 준, 뷰컨트롤러의 스토리보드 아이디를 설정 해줍니다. 저는 SecondViewID 로 설정 해주었습니다. 버튼에 IBAction을 설정 해 준다음에 스토리 보드에서 스토리 보드에서 설정했던 ID를 가지고 옵니다. 그리고 가져온 뷰컨트롤러를 self에서 present 해줍니다. viewControllerName?.modalTransitionStyle를 설정하여 모달의 전환을 설정할 수 있습니다. @IBAction func buttonClick(_ sender: Any) { let viewController

[dev] Hacktober Fest 2020 참가하세요 두 번 하세요!

이미지
[dev] Hacktober Fest 참가하세요 두 번 하세요! 올 해 초부터 오픈소스에 관심을 가지고, 저도 모두를 위한 오픈소스에 컨트리뷰터가 되고자 이런 저런 노력을 했었습니다. 결과는 대 참패… 물론 어떻게 오픈소스를 시작하는지도 공부했고, 첫 커밋을 어떻게 하면 좋을지에 대해서도 공부했었습니다. 하지만 결국 기여하고자 하는 오픈소스를 열어보았을 때 으악! 하고 덮어 버린 것… 이번에는 올 해 엿보고 있던 핵토버 페스트에 참가 해 보았습니다. 무엇을 해야하는지 몰라서 웹페이지 에 들어가서 소개글과 이벤트 들을 읽어 보았습니다. 그 중에 PR을 4번 날리면 티셔츠를 주는 이벤트에 참가 하기로 했습니다. 규칙은 간단했습니다. hacktoberfest2020에 참가하는 레파지토리에 PR을 4번 이상 날린다. 유예기간인 14일 이 지날 때 까지 내가 날린 PR에 Reject 이 없거나 Accept 이 있으면 됩니다. 총 4개의 최종 카운팅이 완료되면 보상을 받을 수 있습니다. 시작 그 와중에도 어떻게 하면 좋을지 찾아보다가 이런 필터 를 사용해서 기여할 만한 프로젝트를 찾았습니다. 저는 초보자 이기 때문에 good first issue 와 swift 로 제한을 두고 찾았습니다. 매너? 기여 했던 프로젝트 중 참고할 만한 내용이 있어서 공유 합니다. 이슈 창에 들어가보면 현재 문제라고 제기 된 이슈들이 있고, 담당자가 없는 곳에가서 참가 의사를 밝혀달라고 합니다. 만약 다른사람이 이미 진행하고 있는 이슈라면 해당 레파지토리에 가서 기여해달라는 내용이 있습니다. 이렇듯 오픈소스에서도 지켜야 하는 예의가 있었습니다. 몰랐었는데 다른 것도 있는지 찾아봐야겠네요. 일합니다 할 수 있는 이슈에 가서 자신에게 할당해달라고 합니다. 그러면 프로젝트 메인테이너?인지 어떤 분이 오셔서 흔쾌히 할당을 해줍니다. 당연히 저는 처음이라 잘 모르니 어떻게 하는지 고민할 시간에 다시 물어봅니다.

[swift] Optional 뜯어보기

이미지
[swift] Optional 뜯어보기 swift에서 데이터를 저장하는 곳을 변수라고 하는데, 이 변수에 아무것도 들어있지 않은 상태를 표현해야 할 일이 있습니다. 0이 아니고 빈 문자열("")도 아닌 아무것도 없는 것. 변수에 아무것도 할당 되어있지 않은 것을 스위프트에서는 참을 수 없으니까요! 아무것도 들어있지 않다라는 것이라도 넣어 둡시다. 이때 사용되는 것이, 없다 라는 오브젝트인 nil입니다. 변수에 아무 값도 들어있지 않다는 뜻 입니다. 사용 법 정의 타입 뒤에 ?를 붙여주면 옵셔널타입 이라는 뜻 입니다. var name: String? = "leeo" print(name!) // leeo name = nil print(name!) // error 이렇게 사용가능합니다. 조금 더 자세히 살펴보면 var name: String? = "leeo" 이 코드에서 타입이 String?임을 알 수 있습니다. 정확히는 이런 뜻 입니다. var name: Optional<String> 왜냐하면 typealias String? = Optional<String> var name: String? 이렇게 한 것과 같은 의미기 때문이죠. 그렇다면 Optional 을 까보고 똑같이 구현해 보도록 하겠습니다. public enum CustomOptional<Wrapped>: ExpressibleByNilLiteral { case none case some(Wrapped) public init(nilLiteral: ()) { self = .none } public init(_ some: Wrapped) { self = .some(some) } } extension CustomOptional: CustomDebugStringConvertible { public var debugD

[swift] guard문으로 함수 입구 틀어막기!

이미지
[swift] guard 처음 가드문을 접한것은 옵셔널 체인의 guard let 에서 였습니다. 그래서인지, 오히려 if let 과 guard let 이 비슷 해 보였고 헷갈리기 때문에 정리 해 두려고 합니다. if문은 너무나 익숙 하기 때문에 따로 정리하지 않겠습니다. guard 형태는 다음과 같습니다. guard 조건 else { 조건이 false return || throw } 뭔가 if문과 비교한다기 보다는 생긴 것 그대로 해석을 해 보면, 특정 조건으로 부터 guard 해줍니다. 조건이 틀린 경우는 모두 버리고, 우리가 원하는 조건만 통과 시키겠다는 의미 입니다. 마치 성문 앞에서 통행증을 보고 통과 시켜주는 가드가 생각나는 군요. 사용 예제 guard문은 조건이 맞지 않으면 종료 시켜야 하도록 문법이 되어있기 때문에, 반드시 return이나 throw를 해주어야 합니다. 반대로 말하면 함수 내부에서 사용하도록 만들어진 녀석이죠. 함수에서 사용할 조건들에 맞지 않으면 걸러 보겠습니다. func guardTest() { let condition1: Bool = true let condition2: Bool = true guard condition1,condition2 else { return print("Bye!") } print("Come In!") } guardTest() 조건 2개를 검사하고 모두 만족할 경우에 들여보내드록 하겠습니다. 만약 조건 중 하나라도 거짓이라면 그 들은 내쫓길 것 입니다. 느낀 장점 개인적으로 느낀 장점은 코드의 가독성이 좋아집니다. 예를 들면 우리가 어떤 함수에서 실행해야 하는 조건이 3개라면, if문으로 썼을 때는 다음과 같습니다. func solution() { if condition1 { if condition2 {

[iOS] 버튼 클릭해서 이미지 돌리기

이미지
[iOS] 클릭해서 이미지 돌리기 앱을 만들다가, 더 보기 ^ 를 눌렀을 때 아래로 화살표가 돌아가면서 목록들이 나타나는 것을 구현할 일이 있었습니다. 위로 향하는 이미지를 누르면 아래로 향하는 이미지로 바뀌도록 코딩을 하려고 했는데 이미지를 돌릴 수 있다는 것을 알고 정리해 두려고 합니다. 버튼으로 상하 반전하기 이 방법은 어떤 버튼을 눌렀을 때 이미지를 상하로 회전시키는 방법입니다. CGAffineTransform을 이용하여 이미지를 뒤집습니다. private var isUpside: Bool = false @IBAction func turnArroundButtonClicked(_ sender: Any) { arrowImageView.transform = CGAffineTransform(scaleX: 1, y: isUpside ? 1 : -1) isUpside = !isUpside } 이미지의 x좌표 y좌표를 변경해여 이미지가 돌아간 것 처럼 할 수 있었습니다. 원래 scaleX, Y로 이미지를 늘려주는 것 이지만, y좌표를 음수를 할당 해 이미지에 반전을 주었습니다. 90도 만큼 돌리기 버튼을 눌러 이미지를 돌리다 보니, 시계방향, 반 시계방향으로 돌리고 싶을 때는 어떻게 해야하나 찾아보다가 발견한 방법입니다. 좋은 방법인지는 잘 모르겠으니, 더 좋은 방법을 아시는 분은 댓글로 달아주세요! private var count: Int = 0 @IBAction func clockWiseButtonClicked(_ sender: Any) { count += 1 arrowImageView.transform = CGAffineTransform(rotationAngle: .pi * 0.5 * CGFloat(self.count)) } @IBAction func reverseClockWiseButtonClicked(_ sender: Any) { cou

[iOS] Kingfisher 둘러보기

이미지
[iOS] Kingfisher 둘러보기 이미지 서버에서 이미지를 가져다 표시해줄 때 항상 쓰던 라이브러리 입니다. 어떤 기능이 있는지 살펴보기 전부터 웹에서 주소로 이미지를 가져올 때는 항상 써서, 이미지를 불러오는 라이브러리 인 줄 알았습니다. 하지만 본래의 목적은 이미지 캐싱이라는 것을 알게 되었고, 이번기회에 어떤 기능이 있는지 살펴보겠습니다. 내용은 Cheat Sheet 를 참고했습니다. 이미지 로딩 저도 이 기능 때문에 사용하는 줄 알았던 이미지 로딩입니다. 사용법은 굉장히 간단합니다. 이미지 뷰를 포함해(NSImageView, UIButton and NSButton)에 Extension 으로 구현되에 있기 때문에 setImage 를 사용해 이미지를 설정하면 됩니다. import Kingfisher let url = URL(string: "https://example.com/image.png") imageView.kf.setImage(with: url) 내부의 동작과정은 다음과 같습니다. url.absoluteString 로 캐싱된 이미지가 있는지 확입합니다. 만약 이미지가 캐싱되어 있어서 찾으면(메모리, 디스크 중), imageView.image에 나타냅니다. 만약 찾지 못한다면, url로 요청을 날려 이미지를 다운받습니다. 다운받은 데이터를 UIImage object로 변환합니다. 변환한 이미지를 메모리나 티스크에 캐싱합니다. 이미지 뷰에 표시합니다. 이미지 다운로드 이미지뷰이 이미지를 설정할 때 캐싱이 되어있지 않으면 다운로드 합니다. case .network(let resource): let downloader = options.downloader ?? self.downloader let task = downloader.downloadImage( with: resource.downloadURL, options: opti

dream iOS 아카데미에서 첫 4주 차 배운 내용들

이미지
dream iOS 아카데미에서 첫 4주 차 배운 내용들 맥북을 받고 기다리고 있는건 프로그래밍의 기초보다는 한 서비스를 만드는 방법의 시작이었습니다. Swift Playground 프로토 타이핑 iOS HIG Swift Playground 다운로드 링크 이 것 하나만 있으면 아이패드 본전을 뽑을 수 있다는? 강력한 프로그램 입니다. iOS만이 아니라 기초적인 프로그래밍적 사고를 할 수 있도록 도와주는 게임입니다. 각 스테이지를 클리어하면서 프로그래밍에 다가갈 수 있는 좋은 교육도구입니다. 저희도 공부할 때에 그냥 하세요 했던 것은 아니고 동영상을 참고할 수 있도록 첨부해주셨습니다. 친절하게도 유투브에 모두 공개가 되어있기 때문에 공유 드립니다. 스위프트 하이 채널 여러분도 코딩배우기 1부터 시작해 보시죠! 프로토 타이핑 프로그래밍과 별개로 나는 어떤 앱을 만들 것인가에 대한 생각을 했습니다. 페르소나, ADS 와 같은 것에 대해 공부했습니다. 그러면서 또한 나는 어떤 앱을 만들까 그려보기도 했습니다. 피그마, 스케치, Xds 가리지 않고 사용방법은 웹에 물어물어 익혀서 했습니다. 중요한건 나의 생각의 구체화 하는 것 이었으니까요. 실제 구현가능 여부는 중요하게 생각하지는 않았습니다. iOS HIG (Human Interface Guidelines) iOS앱 개발의 경전이라 불리며, 개발하기전에 꼭 꼭 두번, 세번 읽어야 한다고 하셨습니다. 사용자를 위한 디자인 가이드라고 생각하시면 됩니다. 저도 한 번만 빠르게 읽었는데 기회가 된다면 번역작업까지 할 수 있었으면 좋겠습니다. 양이 좀 많지만 막 너무 어려워서 시간을 들여야 하는 부분은 아니기 때문에 꼭 꼭 읽어보세요! HIG 링크 정리 이렇게 처음 한달은 앱 개발에 필요한 기초체력에 대핸 설명을 듣고 방향을 정하는 작업을 했습니다. 혹시 dreamin iOS Academy에 참여했더라면 나도 앱을 만들 수 있었