'개발자 넋두리/아이폰개발(Swift)'에 해당되는 글 10건

  1. 2023.10.04 Do it! 스위프트로 아이폰 앱만들기(3~4장) 1
  2. 2023.09.27 Do it! 스위프트로 아이폰 앱만들기(입문, v5)

3장. 원하는 이미지 화면에 출력(사이즈 변경)

4장. 데이트 피커 사용해 날짜 선택하기(날짜 포맷, 타이머 개발)

Do it 스위프트

# 원하는 이미지 화면에 출력(사이즈 변경)

이미지를 선언하고, 변수에 할당하는 것은 다른 언어와 비슷합니다. 다만, 이미지 사이즈를 변경할 때 변수타입이 CGFloat타입임을 알아야 하며, 크기조절할 때 ImageView객체.frame.size의 값을 CGSize(width:,height:)로 재설정한다는 것을 기억하면 됩니다. 

var isZoom = false
var imgOn : UIImage?
var imgOff : UIImage?

     
@IBOutlet var imgView: UIImageView!
    
@IBOutlet var btnResize: UIButton!

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        imgOn = UIImage(named: "lamp_on.png")
        imgOff = UIImage(named: "lamp_off.png")
        
        imgView.image = imgOn
        
}

@IBAction func btnResizeImage(_ sender: UIButton) {
        let scale : CGFloat = 2.0
        var newWidth:CGFloat , newHeight:CGFloat
        
        if (isZoom) {
            newWidth = imgView.frame.width / scale
            newHeight = imgView.frame.height / scale
            
            btnResize.setTitle("축소", for: .normal)
        } else {
            newWidth = imgView.frame.width * scale
            newHeight = imgView.frame.height * scale
            
            btnResize.setTitle("확대", for: .normal)
        }
        
        imgView.frame.size = CGSize(width: newWidth, height: newHeight)
        isZoom = !isZoom
}

데이트 피커 사용해 날짜 선택하기(날짜 포맷, 타이머 개발)

라이브러리에서 데이트피커(Date Picker)를 선택해서 메인스토리보드에 배치하고, Attributes inspector 를 클릭한 후, Style을 wheel로 변경하고, mode를 원하는 값을 설정합니다. 기본 설정값은 Date and Time입니다. 표기를 한글로 바꾸려면 Attributes inspector 에서 Locale 값을 Korean 으로 변경합니다. 

// fomatter를 이용해서 날짜와 시간을 표시하는 방법
@IBAction func changeDatePicker(_ sender: UIDatePicker) {
    let datePickerView = sender
        
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm EEEE"
    lblPickerTime.text = "선택시간 : " + formatter.string(from:datePickerView.date)
}
필드 심벌 결과 의미
년도(Year) yy 23 두 자리로 연도 표시
yyyy 2023 네 자리로 연도 표시
월(Month) M 9 한글자로 월 표시
MM 09 두 자리로 월 표시
MMM Sep 영문 3자리로 월 표시
MMMM September 영문 풀단어로 월 표시
주(Week) w 6 1~52까지 연간 주 순서(week of year) 표시
ww 06 01~52까지 2자리로 연간 주 순서(week of year) 표시
W 4 1~6까지 월간 주 순서(week of month) 표시
일(Day) d 8 1~31 까지 일을 표시
dd 08 01~32 까지 2자리로 일을 표시
D 35 1~366까지 연간 일 순서(day of year)를 표시
DD 35 01~366까지 연간 일 순서(day of year)를 표시
DDD 035 001~366까지 연간 일 순서(day of year)를 표시
요일(weekday) E,EE,EEE Mon Sunday~Saturday까지 3글자로 요일 표시
EEEE Monday Sunday~Saturday까지 요일 전체 이름 표시
EEEEE M 한 글자 약어 요일 표시
e 4 1~7까지 주간 날짜 순서 표시
ee 04 01~07까지 주간 날짜 순서 표시
시기(period) a PM AM/PM 표시
시간(Hour) h 3 1~12까지 시각을 표시
hh 03 01~12까지 시각을 표시
H 15 1~24까지 24시간 시각을 표시
HH 15 01~24까지 24시간 시각을 표시
분(minute) m 36 0~59까지 분을 표시
mm 36 00~59까지 두자리로 분을 표시
초(second) s 44 0~59까지 초를 표시
ss 44 00~59까지 두자리로 초를 표시
지역(Zone) z GMT+09:00 타임존 표시
Z +0900 GMT 시간차 표시
// Timer.scheduledTimer을 이용해서 1초 단위로 화면의 시간을 갱신
class ViewController: UIViewController {
    
    let timeSelector:Selector = #selector(ViewController.updateTime)
    let interval = 1.0
    var count = 0

    @IBOutlet var lblCurrentTime: UILabel!
    @IBOutlet var lblPickerTime: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        Timer.scheduledTimer(timeInterval: interval, target: self, selector:timeSelector, userInfo: nil, repeats: true)
    }
    
    @objc func updateTime() {
        let date = NSDate()
        
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss EEEE"
        lblCurrentTime.text = "현재시각 : " + formatter.string(from: date as Date)
        
    }
}

요약 
- DatePicker에 Timer.scheduledTimer()를 이용해서 현재 시간을 1초단위로 갱신할 수 있고, 특정시간에 이벤트를 발생시킬수 있다.  

 

Posted by 목표를 가지고 달린다
,

아이폰 개발이 처음이라면, 정말 손가락으로 짚어주듯 하나하나 설명해주는 책

Do it! 스위프트로 아이폰 앱 만들기

본 책에 앞서 Swift 기초 문법에 대해서는 이미 배웠으리라 생각됩니다. 아직 struct, class, extension, 익명함수 등이 익숙하지 않아도 됩니다. Do it 입문서는 Xcode를 이용해서 아이폰 UI(Toolbar, Tabbar, 화면전환, StackView, Lable, Button 등) 를 그리는 것을 배우는 책이기 때문에 아이폰 개발을 위해 "기초문법 - UI - 주요기능코딩(SNS인증, Rest APi호출, DB연동 등)" 에서 UI는 화면을 그리는 것이라 문법이 약해도 상관없이 따라할 수 있습니다.

안드로이드와 비교해서 xml기반보다는 GUI기반으로 다가와 조금더 귀찮고, 실수로 잘못된 여지가 좀 있는 것 같지만 아직 Swift코딩에 익숙하지 않아도 빨리 따라할 수 있도록 잘 구성된 책입니다. 특히, 다른 책들은 예제소스를 따라하기에 반복적인 구성(버튼, 그림, 동일한 기능)으로 시간이 오래 걸리는데, 이책은 중복을 최소화하여 핵심 위주로 예제를 구성해서 따라하기 편하게 되어 있습니다. 

개정 5판이라 그런지, 따라해본 예제들은 모두 문법적 오류나 오타가 없었고, flutter처럼 버전에 따른 지원불가로 인한 오류도 없었습니다. 따라하는 과정에서 잘 안되는 경우는 UI를 그렸다가 지우고 다시 그리는 과정에서 Editor에 보이는 소스가 아닌 설정에 연결된 것을 지우지 않거나, 사진이미지를 너무 큰 것을 이용해서 제대로 보이지 않는 경우(이미지가 작은 사진들은 크기를 줄여서 프로젝트에 등록 필요)라 사진의 크기만 적절히 수정하면 됩니다. 

다른 책에서도 프로젝트 생성시 "Single View App"을 선택하라는 말이 있는데, 실제 Xcode화면에는 "Single View App"이란 단어가 없습니다. 그것이 가리키는 것은 바로 "App" 화면입니다. 이 책은 모든 과정에서 메뉴 선택하는 화면 하나하나를 보여주고 있어서 초보자들도 쉽게 배울 수 있습니다. 

 프로젝트 파일 살펴보기

가. AppDelegate : 앱의 실행주기를 관리하는 클래스 파일. 앱을 실행하거나 종료 또는 백그라운드를 실행할 때 하는 일을 관리

나. SceneDelegate : 사용자 인터페이스의 실행주기를 관리하는 클래스 파일

다. ViewController : 화면에 보이는 뷰에서 처리하는 내용의 소스가 담긴 클래스. 일반적으로 프로그래머는 이 파일에서 코딩하게 되며 뷰하나당 클래스 하나가 대응됩니다. 따라 스토리보드에서 여러 개의 뷰를 추가하면 뷰의 갯수 만큼 뷰 컨트롤러 클래스를 추가해야 합니다.

라. Main.storyboard : 앱의 내용을 시각적으로 쉽게 이해하고 프로그래밍할 수 있도록 그림으로 표현한 파일입니다. 스토리보드를 통해 화면에 보이는 내용 및 뷰 간의 연결 관계 등을 표현할 수 있습니다.

마. Assets.xcassets : 앱의 아이콘을 보관하는 저장소입니다.

바. LaunchScreen.storyboard : 앱이 실행될 때 잠시 나타나는 스플래시 화면을 만드는 스토리보드

사. Info.plist : 앱이 실행되는데 필요한 정보를 정하는 파일(권한 설정 등) : 권한 설정 기능을 따로 코딩하는 것이 아니라, 이 파일에 설정해 놓으면 앱에서 필요시 권한 추가 요청 기능이 실행됨(그러고 보면 아이폰에서 권한 요구하는 화면은 모두 동일한 것 같습니다.)

Objects Library 단축키 : command + shift + L 을 누르거나, 메인스토리 화면 위의 "+" 클릭하면 됩니다. Object를 많이 사용한다면 command + shift + L + option 를 누르면, Object를 선택하더라도 Object 팔레트 창이 닫히지 않아 계속 이용할 수 있습니다. 

아웃렛 변수/액션 함수 추가/삭제시 주의 사항

ViewController의 소스에서 삭제할지라도 실제 생성된 액션함수는 사라진 것이 아니라서 반드시 Show the connection inspector 에서 해당 객체를 삭제해줘야 합니다. 실제 이걸 삭제하지 않아서 오류가 발생하기도 합니다. 

iOS 시뮬레이터는 좌우 회전, 흔들기 효과, 멀티 터치(option키 누르고 클릭), GPS(수동입력) 테스트가 가능합니다. 다만, GPS를 이용한 실제 위치 취득, 전화 착신시 동작, 카메라 기능, 가속도 센서 는 테스트할 수 없습니다. 

 

 

 

Posted by 목표를 가지고 달린다
,