
ScrollView 이번 시간에는 AutoLayout 을 이용한 ScrollView 구현에 대해 알아보자. SwiftUI 에서 했던 것처럼 아주 쉽게 구현될 줄 알았지만, 예상외로 알아야 하는 사항이 많아서 당황했다. 우선 스크롤 뷰를 보다 쉽게 관리하기 위해, view 의 사이즈를 freeform 으로 바꾸고 높이를 늘려주자. simulated size 를 늘렸으면, 화면 상에 Storyboard 를 추가해주자 Storyboard Navigator 를 보면, Scroll View 하위에 Content Layout guide 와 Frame Layout guide 가 존재한다. 지금부터 이 두 가지 가이드에 대해서 알아보자 Content Layout guide Apple 공식 홈페이지를 보면, Scroll..

AutoLayout - Hugging Priority Hugging Priority AutoLayout 에 대해 공부하던 중, Hugging Priority Attribute 는 왜 있는거고 어디에 쓰이는지 궁금해졌다. 다음과 같이 두 개의 텍스트 라벨이 있는 화면을 생각해보자 위에서 회색 배경을. forstudy.tistory.com Compression Resistance Priority 이전에 Hugging Priority 에 대해 알아보았다. 그렇다면 바로 밑에 존재하는 속성인 Compression Resistance Priority 는 뭘까?? 영어를 직역하자면 압축 저항 우선 순위라고 하는데, 지금부터 Compression Resistance Priority 에 대해 알아보자 다음과 같이 텍..

Hugging Priority AutoLayout 에 대해 공부하던 중, Hugging Priority Attribute 는 왜 있는거고 어디에 쓰이는지 궁금해졌다. 다음과 같이 두 개의 텍스트 라벨이 있는 화면을 생각해보자 위에서 회색 배경을 가진 라벨에 좌측 상단으로부터 20 포인트 씩 떨어져있는 제약조건을 추가해보자. 그리고 노란색 배경을 가진 라벨에 좌측, 상단, 우측으로부터 20포인트 씩 떨어져있는 제약조건을 추가해보자. 그러면 우리는 위와 같이 에러가 뜨는 것을 볼 수 있다. 에러 메시지를 살펴보도록 하자. Yellow Label 의 Hugging Priority 를 251에서 250으로 낮추라는 메시지를 볼 수 있다. 이것이 무슨 뜻일까?? 우리가 회색 라벨에 좌측 상단 20포인트 제약조건..

Constraint 다음과 같은 화면이 있다고 생각해보자. 위 스크린샷의 노란색 뷰는 넓이가 290이고, 높이가 657이다. 만약에 기기를 회전하거나 다른 크기를 가진 아이폰을 가져온다면 위 뷰는 어떻게 변할까? 아이폰이 회전되었을 때, 아이폰의 높이가 노란색 뷰보다 훨씬 작기 때문에 노란색 뷰가 화면 밖으로 벗어나는 것을 알 수 있다. 만약에 위 노란색 뷰가 사용자에게 보여줘야할 텍스트 뷰라면, 화면을 돌렸을 때 아래와 같이 보여줘야 하는게 훨씬 사용자 경험을 좋게 할 것이다. 즉 아이폰을 회전하거나, 크기가 다른 아이폰을 사용할 때 우리가 의도한 대로 사용자에게 콘텐츠를 보여주는게 궁극적인 목표라 할 수 있을 것이다. 만약 크기가 더 작은 아이폰을 사용했을 때 뷰들이 화면 밖으로 빠져 나간다거나 하는..

DispatchQueue란? DispatchQueue는 작업 항목의 실행을 관리하는 클래스다. 메인 쓰레드 혹은 백그라운드 쓰레드에서 작업을 연속적으로, 혹은 병렬적으로 실행할 수 있다. 이름에서 알 수 있듯이 Queue 자료구조의 형식을 띄고 있어, FIFO (First In First Out) 입출력 구조를 가진다. DispatchQueue 는 다음과 같이 두 가지 종류가 있다. Serial Queue 한 작업을 끝마쳐야 다음 작업으로 넘어갈 수 있다. Concurrent Queue 여러 작업을 동시에 실행할 수 있다. DispatchQueue 로 넣은 작업들은 시스템에 의해 관리되는 쓰레드 풀에서 실행되며, 앱의 기본 쓰레드를 의미하는 main 쓰레드를 담당하는 DispatchQueue 를 제외하곤..

SwiftUI 에서 VStack 이나 HStack 을 사용할 때 자식 뷰들의 넓이 혹은 높이를 똑같이 맞춰주고 싶은 경우가 많다. 그럴 땐 다음과 같이 frame 을 지정해주도록 하자! VStack(spacing:0) { Text("안녕!!!!") .frame(maxHeight:.infinity) //maxHeight 속성을 .infinity 로 변경! .background(Color.blue) Text("월드!!!!\n\n\n\n\n\n") .frame(maxHeight:.infinity) //이하동문 .background(Color.red) } VStack 안의 Text 들의 높이가 똑같아 진 것을 확인할 수 있다. 만약 여기서 frame 속성을 뺀다면 위와 같이 높이가 서로 다른 것을 볼 수 있다...

구조체나 열거형처럼 전달할 때마다 값을 복사해서 새로운 인스턴스를 전달하는 값 타입과는 달리 참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근하기 때문에, 언제 메모리에서 해제되는지가 중요한 문제다. 만약 인스턴스가 더 이상 필요하지 않은데도 계속해서 메모리에서 해제되지 않으면 한정적인 메모리 자원을 낭비하게 되고 이는 성능의 저하로 이어진다. Java 나 Kotlin 같은 언어들은 가비지 컬렉션이란 기법을 사용해 메모리를 관리한다. Swift는 ARC 라는 기법을 사용하는데 이것에 대해 알아보도록 하자 ARC란? Automatic Reference Counting (ARC)는 이름에서도 알 수 있듯이 자동으로 메모리를 관리해주는 방식이다. ARC 는 더 이상 필요하지 않은 클래스의 인스턴스를..
스위프트의 where 절은 특정 패턴과 결합하여 조건을 추가하는 역할을 한다. where 절은 크게 두 가지 용도로 사용된다. 패턴과 결합하여 조건 추가 타입에 대한 제약 추가 즉 특정 패턴에 Bool 타입 조건을 지정하거나, 어떤 타입의 특정 프토코로 준수 조건을 추가하는 등의 기능이 있다. 예제를 통해서 알아보도록 하자 값 바인딩, 와일드카드 패턴과 결합한 where 절 let tuples : [(Int,Int)] = [(1,2),(1,-1),(1,0),(0,2)] for tuple in tuples { switch tuple { //값 바인딩 case let (x,y) where x==y : print("x==y") case let (x,y) where x == -y: print("x==-y") c..
Comment