iOS 개발/UIKit

    [Auto Layout] Multiplier(2)

    [Auto Layout] Multiplier(2)

    코드로 하면 더 깔끔하지만, 공부하는 입장에서는 눈으로 보면서 하면 더 빠르게 이해가 가능하기 때문에 스토리보드를 사용해서 설명하였다. 복습하는 중에 혹시 놓칠만한 것들만 골라서 정리했으니, auto layout을 한번이라도 써본 사람이라면 끄덕 끄덕 하면서 빠르게 읽고 넘어가면 된다...ㅎㅎ Multiplier (2) Multiplier가 어떻게 작동하는지 알아보자. 이 부분을 정확하게 이해하고 넘어간다면, 확실히 auto layout을 보는 시야를 넓힐 수 있을 것이다. Alignment Constraints의 Multiplier의 경우를 보면서 한번 알아보자. 이렇게 View를 safe Area를 따라서 화면 가득 채워보자. 여기서 Top의 Multiplier를 2로 올리면, 이렇게 safe Are..

    [Auto Layout] Multiplier(1)

    [Auto Layout] Multiplier(1)

    코드로 하면 더 깔끔하지만, 공부하는 입장에서는 눈으로 보면서 하면 더 빠르게 이해가 가능하기 때문에 스토리보드를 사용해서 설명하였다. 복습하는 중에 혹시 놓칠만한 것들만 골라서 정리했으니, auto layout을 한번이라도 써본 사람이라면 끄덕 끄덕 하면서 빠르게 읽고 넘어가면 된다...ㅎㅎ Multiplier (1) auto layout을 쓰기 전에, frame과 origin 혹은 center를 쓰면서, 각각의 비율을 계산해서 만들어본 경험이 있을 것이다. 물론 이 방법은 auto layout 과 당연히 다름없이 작동하고, 가끔(구동 중 새로운 view를 띄운다던가 하는 상황)은 더 편리할 때도 있을 것이다. 사실 auto layout을 공부하기 전에는 정밀하게 원하는 위치에 원하는 view를 배치하..

    [Auto Layout] Equal Constraints에 대해서

    [Auto Layout] Equal Constraints에 대해서

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

    [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?) 이 함수를 통해 메일 보내는걸 성공하고 나..