본문 바로가기

iOS/COURSE

[스파르타코딩클럽] iOS 앱개발 기초반 5주차

터치

아이폰은 최대 5개의 터치를 지원한다.

import UIKit

class FingerGameView: UIView {

    //터치 시작
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        
    }

    //터치 이동
    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        
    }

    //터치 끝
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        
    }

    //터치가 비정상적인 이유로 끝남
    override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
        
    }
}

 

 

진동

// 가벼운 물리적 충돌을 묘사
let impactLight = UIImpactFeedbackGenerator(style: .light)
impactLight.impactOccurred()

// 무거운 물리적 충돌을 묘사
let impactHeavy = UIImpactFeedbackGenerator(style: .heavy)
impactHeavy.impactOccurred()

// 어떤 요소를 선택하거나 했을 때 사용
let selection = UISelectionFeedbackGenerator()
selection.selectionChanged()

//notification 은 한 번만 선언해도 됨!
let noti = UINotificationFeedbackGenerator()

//액션의 결과에 따라 각각 성공, 에러, 주의를 위한 진동
noti.notificationOccurred(.success) // 성공
noti.notificationOccurred(.error)   // 에러
noti.notificationOccurred(.warning) // 주의

 

 

애니메이션

무엇을 어느 상태에서 어디로

UIView.animate(withDuration: 5) { // 5는 애니메이션이 움직일 시간 길이입니다.
	// 애니메이션이 끝난 후 보였으면 하는 결과물 블록
    view.frame.height = 100
}

 

UIView.animate() 함수 블럭에 들어갈 수 있는 요소들

  • 뷰의 frame, bounds, center 등 뷰의 프레임 정보
  • 뷰의 backgroundColor, alpha 등의 뷰의 배경색 및 투명도
  • 뷰를 회전하거나 확대하는데 쓰이는 transform

 

(한개의 프레임은 보통 60FPS)

 

 

애니메이션을 구현하는 다른 방법

  • Timer 를 사용하여 바꿔줄 수도있다.
  • UIView.transition
  • 외부 라이브러리

 

 

타이머 관련 함수는 분리 

+가독성

 

 

시계 깜빡깜빡 -> alpha 값 변경 애니메이션

func blinkTimerLabel() {
    self.secondsLabel.alpha = 1
    
    UIView.animate(withDuration: 0.5) {
        self.secondsLabel.alpha = 0
    }
}

 

alpha 값이란? 투명도

https://developer.apple.com/documentation/uikit/uiview/1622417-alpha

 

Apple Developer Documentation

 

developer.apple.com

 

 

Assets 에 자주 쓸 색 추가하기 - Color Set

  1. Color Set
  2. Appearance → None
  3. Universal 이라고 표시된 흰색 네모 클릭 후, 오른쪽 하단에 Show Color Panel 클릭
  4. 스포이드 버튼 눌러서 원하는 색 선택하기
  5. 색깔 이름 정해주기
  6. 이름으로 색 사용
UIColor(named: "myRed")

 

 

동그라미 뷰 만들기

여기서는 터치 시 동그라미 뷰를 생성

동그라미:  width / 2 = height / 2 = cornerRaduis

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    //터치는 생각해보면 동시에 여러 개가 가능합니다!(멀티터치)
    for touch in touches {
        
        //동그라미 뷰 만들기
        let view = UIView(frame: CGRect(x: 0, y: 0, width: 80, height: 80)) // 사이즈 80, 80
        view.backgroundColor = UIColor(named: "red") // Assets.xcassets 에 정해둔 색깔
        view.layer.cornerRadius = 40 // 사이즈의 절반을 넣으면 동그라미가 됨
        view.center = touch.location(in: self) // 터치의 위치를 받아서 뷰의 센터 좌표로 넣기
        
        // 해당 터치에 동그라미 뷰 연결해주기
        touchToRoundView[touch] = view
        
        // 뷰에 동그라미 뷰 삽입하기
        self.addSubview(view)
    }
}

 

 뷰 삭제

view?.removeFromSuperview()

 

 

View 와 ViewController 연결하기

UIView 를 상속받은 화면 

controller 변수를 ViewController? 타입으로 추가

class FingerGameView: UIView {
    
    var touchToRoundView: [UITouch: UIView] = [:]
    weak var controller: FingerGameViewController? // 추가 
    
    //터치 시작
    ...

 

ViewController 를 상속받은 화면

gameView 변수를 UIView! 타입으로 원래 연결되어 있을 것

viewDidLoad() 에서 view의 controller 변수에 self를 대입하여 View와 연결

import UIKit

class FingerGameViewController: UIViewController {

    @IBOutlet weak var gameView: FingerGameView! // 클래스 변경
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        gameView.controller = self // gameView 의 컨트롤러에 연결해 줍니다
    }

    @IBAction func closeButtonClicked(_ sender: Any) {
        
    }
    
}

 

 

cocoapods  사용 (m1)

// 폴더 터미널에서
pod init

open Podfile


// 텍스트 파일 end 위에 라이브러리들의 pod ~~ 추가하고 저장


// intel MAC
pod install --repo-update

// m1 칩만 !
arch -x86_64 pod install --repo-update

.xcworkspace 로 열기

 

Info.plist 등 다른 설정은 설명 보고 하기

 

 

 

App Store 심사 지침

https://developer.apple.com/kr/app-store/review/guidelines/

 

App Store 심사 지침 - Apple Developer

App Store 심사 지침 앱은 세상을 바꾸고 있습니다. 앱을 통해 사람들의 삶은 풍요로워지고, 여러분과 같은 개발자들은 전에 없던 새로운 방식으로 혁신을 이루고 있습니다. 이에 따라 App Store는 수

developer.apple.com

앱을 출시하려면 한번쯤은 읽어보자 

1시간 분량