티스토리 뷰

TIL

[TIL] 2022 / 07 / 12

희철 2022. 7. 12. 21:55

Content Hugging Priority, Compression Resistance Priority

 

Content Hugging Priority

-> 우선순위가 높으면 크기가 intrinsic size보다 더 작아질 수 있음.

현재 라벨의 width는 정해주지 않은채 사이에 10의 constraint만 있고, Content Hugging Priority는 같은 상태

-> 오토레이아웃을 만족하기 위해 두 개의 뷰 중 하나의 뷰가 커져야하는데, 우선순위가 같으므로 빨간줄

 

Content Hugging Priority를 높이면 뷰가 커지지 않을 수 있음.

 

오른쪽 Label의 Hugging Priority를 1 높이면, 왼쪽 Label의 우선순위가 더 낮기 때문에 크기가 우선적으로 커져야함.

 

빨간줄이 없어지고 왼쪽 레이블의 크기가 커짐으로써 오토레이아웃을 만족하게됨.

 

이때 오른쪽 레이블의 text를 더 늘린다면, 레이블의 크기는 텍스트에 따라 자동으로 결정되므로 오른쪽 레이블의 텍스트가 다 나올만큼만 커짐.

 

이제 오른쪽 레이블의 텍스트를 훨씬 길게 늘려보겠음.

 

왼쪽 레이블도 안의 텍스트때문에 정해진 크기가 있을거임.

 

여기서 Compression Resistance Priority의 개념이 필요

 

우선순위가 높으면 크기가 intrinsic size보다 커질 수 있음을 의미함.

 

즉, 오른쪽 레이블의 Compression Resistance 우선순위가 더 높다면 담고 있는 텍스트를 최대한 포함할 수 있도록 계속해서 늘어나는 것

-> 오토레이아웃을 설정해준만큼만.

 

양쪽에 10이라는 제약이 걸려있으므로 오른쪽 레이블의 텍스트가 엄청 많고, Compression Resistance Priority가 높다면 양쪽의 제약을 지킬때까지 늘어나게됨.

왼쪽 레이블의 Compression Resistance Priority가 더 낮고 width제약이 따로 걸려있지않다면 보이지 않게 되는 것임.

 

만약 width제약이 걸려있다면 오른쪽 레이블이 그 제약을 무시할만큼 커지진 못함.

아래는 왼쪽 레이블에 60이라는 width 제약을 걸어준 상태

 

버튼이나 레이블이 여러 개 있을때 최소 width 제약 걸고 우선순위 이용해서 width를 유동적으로 조절 가능할 듯

 

 

UIActivityViewController

 

 

공유버튼 누르면 뜨는 뷰

 

 

UIAlertViewController

 

 

간단하게 네 가지의 순서로 만든다고 할 수 있음.(함수 선언과 호출은 기본)

func showAlertController() {
        
    // 1. 바탕 만들고 글씨 넣기
    let alert = UIAlertController(title: "타이틀", message: "메세지가 들어갑니다.", preferredStyle: .alert)
    
    // 2. 버튼 만들기(개수 등)
    let ok = UIAlertAction(title: "확인", style: .destructive, handler: nil)
    let hi = UIAlertAction(title: "hi", style: .cancel, handler: nil)
    let bye = UIAlertAction(title: "bye", style: .destructive, handler: nil)
    let good = UIAlertAction(title: "good", style: .default, handler: nil)
        
    // 3. 버튼 분리되어있는거 하나로 합쳐줌(흰 바탕에 버튼 추가)
    alert.addAction(ok)
    alert.addAction(hi)
    alert.addAction(good)
    alert.addAction(bye)
    
    // 4. 띄워줌.
    present(alert, animated: true, completion: nil)
}

 

handler는 alert에서 버튼을 눌렀을 때의 기능을 넣을 때 이용

Completion은 내부적으로 처리할 내용이 있을 때 사용(예를 틀어, 통계 등)

 

위 코드를 버튼의 액션에 넣어서 실행.

preferredStyle이 왼쪽부터 alert, actionSheet

위에서 알 수 있는 점

-> destructive는 빨간색 글씨

-> cancle은 글씨가 조금 더 두껍고, 가장 아래에 있음. actionSheet에서는 cancle이 떨어져있음.

-> default는 그냥 파란색 글씨의 일반 버튼

 

Cancle 스타일은 반드시 하나만 있어야함.

 

만약 버튼을 두 개만 추가한다면 리스트가 아닌 아래처럼 뜸.

하나도 가능.

 

actionSheet에서는 타이틀이나 메세지 잘 안쓰고, alert에서는 거의 씀

-> 없앨때 ""이 아닌 nil로 해야 칸을 먹지 않음.

 

버튼 대신 datePicker같은 컨텐츠도 넣을 수 있음.

 

 

열거형(Enumeration)

 

 

연관된 데이터가 멤버로 구성되어 있는 자료형 객체

 

열거형의 멤버들은 정의되는 시점에 컴파일러가 인지할 수 있으므로, 컴파일 시점에 오류를 인지할 수 있음.

 

열거형의 case는 그 자체로도 독립적인 값이지만, 원시값을 따로 정의할 수 있음.

enum MusicType: Int {
    
    case all = 0
    case korea = 1
    case other = 2
    
}

 

특정 멤버에 대해서만 원시값을 가지는 경우에 나머지의 원시값을 출력해보면 각 항목의 이름을 그대로 원시값으로 가짐.

 

정수 타입을 원시값으로 가지는 경우엔 첫 항목을 기준으로 1씩 증가함.

 

 

Tuple

 

 

타입의 이름이 따로 지정되어 있지 않은 타입. 즉, 지정된 데이터의 묶음

 

https://heecheol.tistory.com/27?category=1273703

 

[Swift] 튜플(Tuple)

튜플이란? 타입의 이름이 따로 지정되어 있지 않은 타입. 즉, 지정된 데이터의 묶음이라고 할 수 있다. 튜플은 타입 이름이 따로 없기 때문에 일정 타입의 나열만으로 튜플 타입을 생성해줄 수

heecheol.tistory.com

 

 

함수의 반환값

 

 

예를 들어, shuffle은 원래의 데이터를 섞는 것이고 shuffled는 섞은 값을 반환해주지만 원래의 데이터는 그대로 유지.

 

 

 

Raw String

 

 

문자열을 나타낼 때 ""안에 나타내지만 문자열 안에 "를 포함하고 싶을 때가 있을 것임.

-> #을 이용하면 됨.

let str = #"aaaaa""aaa"#
// aaaaa""aaa출력

 

대신 줄바꿈이나 문자열 보간법을 사용할 때에는 똑같이 #을 적어줘야함.

let str = #"aaaaa""\#naaa"#
// aaaaa""
// aaa
let and = 1
let str = #"aaaaa""\#(and)naaa"#
// aaaaa""1naaa 출력

 

 

움직이는 Launch Screen

 

 

저번에 어떤 방식으로 할 지 대충 예상은 해봤기에 실제로 적용해봄.

 

다만, 애니메이션의 첫 화면과 사이즈가 맞는 이미지 에셋을 구할 수가 없어 캡쳐해서 사용

-> 조금씩 바꿔가며 오토레이아웃으로 위치 조정해서 그나마 자연스럽게 함

 

'TIL' 카테고리의 다른 글

[TIL] 2022 / 07 / 14  (0) 2022.07.15
[TIL] 2022 / 07 / 13  (0) 2022.07.13
[TIL] 2022 / 07 / 11  (0) 2022.07.12
[TIL] 2022 / 07 / 10  (0) 2022.07.10
[TIL] 2022 / 07 / 09  (0) 2022.07.09
댓글
최근에 올라온 글
Total
Today
Yesterday