[iOS] 명언 생성기 만들기

미야몽·2022년 1월 13일
2

iOS_토이프로젝트

목록 보기
1/2

화면에 Label 두 개로 명언과 이름을 띄워주고, 명언 생성 버튼을 클릭할 때마다 내용이 랜덤하게 바뀌는 기능을 구현해보자.

화면 구성

UIView 위에 UILabel을 두개 올려놓아주었다.
이 때 명언의 길이가 매우 길 때를 대비해서 constraint priority를 설정해주어야 한다.

Content Hugging Priority VS Compression Resistance Priority

뷰 위에 올려진 오브젝트들은 Constraint 제약 조건에 따라 다른 오브젝트들의 크기에 따라 늘어나거나 줄어든다. 이 때, 어떤 오브젝트가 우선적으로 늘어나거나 줄어들지에 대해 Priority를 지정해 주어야 한다.

  1. Content Hugging Priority
    늘어나기에 저항하는 값
    이 값이 높을수록 해당 오브젝트의 크기가 우선 유지되고, 낮을수록 해당 오브젝트가 우선적으로 크기가 늘어난다.
  2. Compression Resistance Priority
    줄어들기에 저항하는 값
    이 값이 높을수록 해당 오브젝트의 크기가 우선 유지되고, 낮을수록 해당 오브젝트가 우선적으로 크기가 줄어든다.

=> 위의 명언 생성기 앱에서 명언 라벨과 이름 라벨로 예를 들어보자.

상대적으로 사람 이름은 거의 한 줄에서 끝나기 때문에 내용이 늘어나도 많이 보여주어야 하는 것은 명언!
-> 명언 라벨의 Hugging Priority를 이름 라벨보다 줄인다.
명언이 계속해서 늘어나는 경우에, 명언이 좀 잘리더라도 이름 라벨을 보여줘야해!
-> 이름 라벨의 Compression Resistance Priority를 명언 라벨보다 늘린다.

Quote 구조체

명언을 (명언, 이름) 형태로 저장해 줄 구조체를 만들어주자.
Swift 파일을 하나 생성하고 아래의 형태로 작성해준다.

import Foundation

//구조체
struct Quote {
    let contents: String
    let name: String
}

이후 controller 파일에서

let quotes = [
        Quote(contents: "나는 나 자신을 빼 놓고는 모두 안다.", name: "비용"),
        Quote(contents: "배고플 때는 먹어라.", name: "미야몽"),
        Quote(contents: "몇 번이라도 좋다! 이 끔찍한 생이여...다시!", name: "니체"),
        Quote(contents: "멍멍!", name: "강아지"),
        Quote(contents: "야옹!", name: "고양이")
    ]

배열에 Quote 구조체의 형태로 객체 배열을 만들어준다.

버튼 액션

버튼을 클릭할 때마다 명언 배열에서 랜덤하게 배열을 가져와 화면에 띄워준다.

 @IBAction func tapQuoteGeneratorButton(_ sender: Any) {
        let random = Int(arc4random_uniform(5))  //0~4 사이의 난수를 랜덤하게 만들어 줌
        let quote = quotes[random]
        self.quoteLabel.text = quote.contents
        self.nameLabel.text = quote.name
    }

arc4random_uniform(5) 처음 보는 함수! 0~4 사이의 난수를 랜덤하게 만들어 주는 함수이다.
이런 식으로 만든 난수로 명언 배열의 인덱스로 접근해 값을 가져와 띄워준다.

완성!

완성한 프로젝트 파일은 깃허브 링크로

profile
개발을 신나게!

2개의 댓글

comment-user-thumbnail
2022년 1월 15일

저희 우치는 야옹이 아니라 웨옹이라고 하는데요?

답글 달기
comment-user-thumbnail
2022년 1월 21일

웨옹

답글 달기