[아이폰 앱 1] 오늘의 말씀

김상우·2021년 11월 1일
1

개발 정보

앱 제목 : 오늘의 말씀 (첫 iOS 앱)

프로그래밍 언어 : Swift
개발 환경 : XCode, Story Board

활용 기술 :
1. AutoLayout
2. UILabel
3. UIButton
4. MVC 패턴
5. swift 구조체

github : https://github.com/heyksw/Swifting/tree/main/iOS앱%20만들기/오늘의%20말씀


애플 개발자 계정 등록

최근, iOS 앱 개발을 위해 애플 개발자에 등록했습니다.
간단한 저의 첫 아이폰 앱을 만들어 보았습니다.


앱 실행 화면 gif

  • 리프레쉬 버튼을 누를때마다 랜덤한 성경 말씀을 출력하는 앱

비판적 클론 코딩

  • 비판적 클론코딩이란

패스트 캠퍼스 강의의 "명언 생성기 앱" 을 클론 코딩하며 공부했습니다.
단순히 따라치는 것보다는, 능동적으로 생각하며 코드를 작성하는 것이 더 도움이 된다고 생각했습니다. 따라서 클론코딩하며 공부할 때는 반드시 나만의 생각이 들어간 코드를 넣어 비판적 클론 코딩을 하겠다고 생각했습니다.

  1. UIView 의 모서리를 직각이 아닌 둥글게 설정
  2. Button 을 클릭할때 색상이 살짝 바뀌었다가 돌아오도록 설정
  3. Custom font 를 적용
  • cornerRadius

-> view에 layer.corner.Radius 에 접근하여 모서리를 얼마나 둥글게 변경할 것인지를 적용할 수 있다는 것을 따로 공부했습니다.

-> Button Touch Down, Touch Up Inside의 차이점에 대해서 공부했습니다.


문제해결

  • Font 변경 중 문제 해결
// 폰트 목록에 Gowun Batang 이 없으면 제대로 들어가지 않은 것
        for family in UIFont.familyNames.sorted() {
            let names = UIFont.fontNames(forFamilyName: family)
            print("Family: \(family) Font names: \(names)")
        }
        
        
        // guard 문으로 폰트가 잘 추가 되었는지 에러 체크
        guard let gowun = UIFont(name: "Gowun Batang", size: 18) else {
            print("Gowun Batang is not in UIFont")
            return
        }
        
        myTitle.font = gowun
        quoteLabel.font = gowun
        nameLabel.font = gowun

폰트를 다운받고 프로젝트 파일에 추가해줬지만, 폰트가 적용되지 않았습니다. developer.apple 사이트에서 참고하여, guard let 문으로 폰트가 제대로 추가가 된 것인지 확인했을 때 파일은 추가가 되었지만 프로젝트 내에 적용이 되지 않았다는 것을 알게 되었습니다.

Target Membership 에서 프로젝트를 체크해주고 프로젝트 내에 성공적으로 적용할 수 있었습니다.


앱 개발을 통해 얻어갈 것

  1. layer.cornerRadius
  2. .swift 파일에 구조체를 따로 생성하여 View Controller 에서 구조체를 불러와 사용할 수 있다.

Swift 코드

  • ViewController.swift
//
//  ViewController.swift
//  오늘의 명언
//
//  Created by 김상우 on 2021/11/01.
//

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var quoteLabel: UILabel!
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var contentView: UIView!
    @IBOutlet weak var title2: UILabel!
    @IBOutlet weak var refreshButton: UIButton!
    
    let quotes = [
        Quote(contents: "미련한 자라도 잠잠하면 지혜로운 자로 여기우고 입술을 닫히면 슬기로운 자로 여기우느니라", name: "잠언 17:28"),
        Quote(contents: "가난한 자를 무시하는 사람은 그를 지으신 하나님을 멸시하는 자이며 가난한 자를 불쌍히 여기는 자는 하나님을 존경하는 자이다.", name: "잠언 14:31"),
        Quote(contents: "비판을 받지 아니하려거든 비판하지 말라", name: "마태복음 7:1"),
        Quote(contents: "너는 초대를 받거든 오히려 맨 끝자리에 가서 앉아라. 그러면 너를 초대한 사람이 와서 '여보게 저 윗자리에 가서 앉게' 하고 말할 것이다.", name: "누가복음 14:10"),
        Quote(contents: "여호와는 나의 목자시니 내게 부족함이 없으리로다.", name: "시편 23:1"),
        Quote(contents: "무릇 자기를 높이는 자는 낮아지고 자기를 낮추는 자는 높아지리라.", name: "누가복음 14:11"),
        Quote(contents: "사람이 마음으로 자기의 길을 계획할지라도 그의 걸음을 인도하시는 이는 여호와시니라", name: "잠언 16:8"),
        Quote(contents: "죽고 사는 것이 혀의 권세에 달렸나니 혀를 쓰기를 좋아하는 자는 그 열매를 먹으리라", name: "잠언 18:21"),
        Quote(contents: "말이 많으면 허물을 면키 어려우나 그 입술을 제어하는 자는 지혜가 있느니라" , name: "잠언 10:19"),
        Quote(contents: "모든 지킬만한 것보다 네 마음을 지키라 생명의 근원이 이에서 남이니라", name: "잠언 4:23")
        
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        title2.text = "랜덤 성경 명언"
        contentView.layer.cornerRadius = 20
        
        refreshButton.layer.cornerRadius = 10
        //quoteLabel.text = "test"
        
    }


    var count = 0
    
    @IBAction func tapQuoteGeneratorButton(_ sender: Any) {
        let random = Int(arc4random_uniform(8))
        let quote = quotes[random]
        
        self.quoteLabel.text = quote.contents
        self.nameLabel.text = quote.name
        
    }
}


  • Quote.swift
// 말씀 구조체 선언

import Foundation

struct Quote {
    // 말씀의 내용
    let contents: String
    // 말씀이 어디 적혀 있는지
    let name: String
}
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글