전체 글

Playground

    [Auto Layout] Equal Constraints에 대해서

    [Auto Layout] Equal Constraints에 대해서

    코드로 하면 더 깔끔하지만, 공부하는 입장에서는 눈으로 보면서 하면 더 빠르게 이해가 가능하기 때문에 스토리보드를 사용해서 설명하였다. 복습하는 중에 혹시 놓칠만한 것들만 골라서 정리했으니, auto layout을 한번이라도 써본 사람이라면 끄덕 끄덕 하면서 빠르게 읽고 넘어가면 된다...ㅎㅎ Equal Constraints Constraints는 "길이, 간격"으로 이해하면 된다. Top Constraints를 10을 줬다는 것은, Top부터 10 간격만큼 떨어진 곳에 view를 배치했다는 뜻이다. 아래 왼쪽의 그림처럼 3개의 View가 있다고 가정하자. 우리는 저 View들의 간격과 높이를 일정하게 맞추어서 오른쪽 그림처럼 만들고 싶다. 엥 너무 쉬운거 아니야? 먼저 모두들 View들의 상하좌우 Co..

    지속적인 발전 번역본

    지속적인 발전 번역본

    https://mighty-venus-d8a.notion.site/Continuous-Integration-d8f07eda6ce543b4bdb04670aef86df8 Continuous Integration 원문 https://www.martinfowler.com/articles/continuousIntegration.html#BuildingAFeatureWithContinuousIntegration mighty-venus-d8a.notion.site 개인적으로는 정말 인상깊은 문서이다. saver 프로젝트를 하면서 허광남 멘토님께 받았던 협업에 대한 가르침을 체계적으로 다시 한번 복습할 수 있었던 좋은 계기었던 것 같다. 하지만 읽기만 해서는 내가 활용할 수 없다. 꾸준히 이 글을 찾아오면서 내 팀프로..

    머리속정리

    아무것도 아닌 그냥 생각나는대로 키보드를 누르고 있다. 해야할게 애매할 때, 특히 내 일의 실제 우선순위와 상황적 우선순위가 흐트러질 때, 많이 당황스러워진다. 이럴 때는 아이패드나 노트에 끄적 끄적 아무 생각이나 떠오르는 것들을 적으면서 생각 정리를 좀 하고는 하는데, 그렇게 했을 때 나중에 다시 돌아봤을 때 정확히 무슨 생각이었었는지 잘 모르겠었어서, 나중에 내 선택에 대한 결과가 나온 후 이 고민과 내 결정을 돌아보기 위해서 한번 적어보려고 한다. 나는 집중할 수 있는 일 한가지가 명확하면 10시간이고 12시간이고 앉아서 할 수 있지만, 지금처럼 학교 기말고사라던지, 과외라던지 무언가 큰 문제가 섞이기 시작하면 전체적인 일의 효율이 확 줄어드는 것 같다. 오히려 모든 일에 쓰는 시간도 줄어든다. 오..

    [UIGestureRecognizer] tableview와 함께 사용하기

    [UIGestureRecognizer] tableview와 함께 사용하기

    테이블 뷰는 기본적으로 scroll을 사용합니다. 그래서 tableView에 다른 제스처 액션을 추가하면, 작동하지 않습니다. 자세한 이유는 2021.11.17 - [iOS 개발] - [GestureRecognizer] Gesture 잘 사용하기 - 동시에 여러 gesture 사용하기, 주의점 [GestureRecognizer] Gesture 잘 사용하기 - 동시에 여러 gesture 사용하기, 주의점 제스처를 사용하는 방법은 간단합니다. 자! 저는 지금부터 infoView라는 제가 만든 View에 왼쪽으로 Swipe했을 때 어떤 동작이 실행되도록 해보겠습니다!! 먼저 우리는 제스처 인식기를 만들어주어야 hasensprung.tistory.com 이곳에 열심히 적어두었으니 꼭 참고하시길 바랍니다!! 이런..

    [UITableView] SwipeAction -  cell 삭제 (확인 Alert와 함께)

    [UITableView] SwipeAction - cell 삭제 (확인 Alert와 함께)

    TableView는 자체적으로 Delegate를 통해, 스와이프 액선을 지정해주고 있습니다. 저는 Cell을 스와이프해서 해당 Cell을 삭제해주는 작업을 구현해보았습니다. Cell을 삭제할 때, Delete를 할 것인지 한번 확인하지 않으면, 사용자의 입장에서는 원치 않은 삭제를 할 수 있고 개발자는 이를 복구해줄 수 있는 툴을 만들어 주지 않는 이상, 반드시 사용자에게 정말 삭제할 것인지를 한번 확인받아야 한다고 생각합니다. 유저는 마치 쓰고 있던 블로그 글을 통채로 날린 느낌일 것이기 때문이에요..ㄸㄸ 다음은 제 tableView가 UITableViewDelegate를 채택해서 구현해야 하는 함수로 스와이프 하면 다음과 같은 삭제 버튼이 나타나게 됩니다. func tableView(_ tableVi..

    [UITextView] 줄 수, 글자 수 제한

    [UITextView] 줄 수, 글자 수 제한

    스택 오버플로우의 어떤 글을 보아도, 완벽하게 모든 상황을 커버하는 함수를 찾지는 못했습니당ㅜ 거의 대부분 어느정도 내 상황에 맞추어 커스텀을 해서 사용하는 것 같아요. 기록 앱을 출시하고 나서 대부분의 버그들은, 텍스트필드에서 나오네요... 정말 생각지도 못한 것들.. 개행만 있을때, 커다란 이모티콘만 있을 때 등등 이런 것들을 다 커버하기 위해서는 스택오버플로우를 그대로 사용해서는 안됩니다! 꼭 본인들의 상황에 맞추어 커스텀하고 예외처리 하셔서 쓰시길 바래요ㅎㅎ 그래도 나름? 괜찮은 함수를 공유할게요! limit TextView to certain number of lines in swift 2 I need to restrict my textview to only 6 lines. How do I li..

    [UIView] 정말 예쁜 blur Effect

    [UIView] 정말 예쁜 blur Effect

    iOS7 에서였나?? 어느순간부터 애플에서 뒷 배경을 흐리게 하면서 그 위에 다른 view를 띄워서 계층감을 주는 UI를 주력으로 밀었죠..ㅎㅎ 저는 그때 대학입시를 준비하고 있었는데, 학원에 설치되어있는 아이패드를 보면서 갑자기 UI디자인이 너무 바뀌어서 며칠동안을 아이패드 앞에서 이것저것 만져봤던 기억이 있습니다ㅎㅎ 뭔가 밋밋한 미완성의 느낌이 나면서도 예뻤던 느낌... 아니 어떻게 이렇게 확 바뀐 UI를 출시할 수 있지?? 시장반응이 무섭지 않나? 라는 생각도 해봤었습니다. 하지만 정말 예쁘다고 생각했고, 그때만큼은 아니지만, 지금도 이 효과를 쓰면 정말 예뻐질 것 같은 순간들을 만납니다. 이번에 작업했던 앱에서는 이렇게 도형을 클릭하면 도형의 상세정보가 나오는데, 뒤에 블러처리를 하니 정말 예쁜 ..

    [Swift] App 첫 로딩을 감지하는 법 (first loading detection)

    [Swift] App 첫 로딩을 감지하는 법 (first loading detection)

    앱의 최초실행을 감지하는 방식은 중요합니다. 첫 실행을 할 때 회원가입을 유도하거나, 유저에 대한 정보를 받아오거나, 도움말을 띄워주는 등의 작업을 수행해야 하기 때문입니다. 유저의 첫 로딩은 UserDefault를 이용해서 감지합니다. 로직은 매우 간단합니다. bool type의 userDefaults 값은 처음 생성될 때, default로 Flase값을 가지고 있습니다. 생성된 이후에는 이미 가지고 있는 값을 계속 가지고 옵니다. let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore") 이렇게 앱을 실행할때 가장 먼저 실행되는 init page에 다음과 같은 변수를 선언합니다. 이 변수는 "lauchedBefore"이라는 ke..

    [Swift] 앱 안에서 메일 보내기

    [Swift] 앱 안에서 메일 보내기

    앱 안에서 메일을 보내는 방법은 다음과 같아요!! canSendMail을 통해, 메일을 보낼 수 있는 상태인지를 확인합니다. 만약에!! Mail 앱이 안깔려있거나 하면 메일을 못보내겠죠?? 그럼 canSendMail이 False로 들어가서 메일 전송 실패를 내뱉습니다. MFMailComposeViewController 은 이미 그 자체로 메일을 보내는 틀을 완성해 놓고 있어서, 우리는 메일 보낼 주소, 제목, 내용 정도만 미리 적어놓고, func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) 이 함수를 통해 메일 보내는걸 성공하고 나..