티스토리 뷰
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은 내부적으로 처리할 내용이 있을 때 사용(예를 틀어, 통계 등)
위 코드를 버튼의 액션에 넣어서 실행.
위에서 알 수 있는 점
-> 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
함수의 반환값
예를 들어, 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