순발력 구분 게임 어플 만들기에 대한 기획서 내용은 아래 링크에서 확인하실 수 있습니다.

https://developer-p.tistory.com/168

 

[iOS 스터디/week4-1] 순발력 구분 게임 어플 만들기 기획서(Game App Proposal that distinguish quickly)

순발력 구분 게임 어플 만들기에 대한 기획서입니다. 순발력 구분 게임 화면에 보이는 캐릭터를 같은 시간내에 빠르게 구별해서 최대한 높은 점수를 내는 게임. 전체 로직 사용자는 start버튼

developer-p.tistory.com

 


최종 결과물

 

순발력 구분 게임 최종 완성.

 


개발하면서 참고했던 링크들도 모두 함께 첨부합니다.

 

구현페이지

 

첫 번째 페이지(StartViewController - StartVC)

Navigation Controller - 네비게이션 바 숨기기

 

// 참고 : https://faith-developer.tistory.com/31
    // StartVC에선 네비게이션바가 안보이게 하고,
    override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }
    // gameVC에선 네비게이션바가 보이게 설정.
    override func viewWillDisappear(_ animated: Bool) {
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }

 


두 번째 페이지(ViewController - gameVC)

 

액션퍼즐패밀리 게임 참고.

타이머 재생 방법

https://stackoverflow.com/questions/50032532/swift-4-how-can-i-add-a-countdown-timer-inside-of-my-uibutton-settitle/50032608

 

Swift 4: How can I add a Countdown timer inside of my UIbutton .settitle?

I am trying to add a Countdown timer inside of my UIButton in the .settitle. How can I do this? The image below is what I am trying to accomplish. Then once the timer gets to 0, I want the backgro...

stackoverflow.com

 

Q. 타이머 메모리 누수가 있는 거 같다. 아닌가?

→ 누수 있는 거 맞다. 누수를 잡기 위해선 self.weak (?) 약한참조를 해주면 된다. 이 부분에 대해선 추후에 말할 기회가 있을 것. 약한참조를 해주면 많은 부분이 해결된다.

 

 

(아래는 제공받은) 타이머 코드

더보기
더보기
// MARK: - Properties
    
    var vTimer: Timer?          // 인증번호 타이머
    var totalTime: Int = 180    // 인증번호 시작 03:00

/** 타이머 시작버튼 클릭 */
    @objc func onTimerStart(_ sender: Any) {
        if let timer = vTimer {
            //timer 객체가 nil 이 아닌경우에는 invalid 상태에만 시작한다.
            if !timer.isValid {
                /** 1초마다 timerCallback함수를 호출하는 타이머 */
                vTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerCallback), userInfo: nil, repeats: true)
            } else {    // 타이머 실행중에 다시 타이머를 실행했다면, 기존의 타이머를 멈추고 난 후, 실행한다.
                timer.invalidate()
                self.totalTime = 180
                vTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerCallback), userInfo: nil, repeats: true)
            }
        }else{
            //timer 객체가 nil 인 경우에 객체를 생성하고 타이머를 시작한다.
            /** 1초마다 timerCallback함수를 호출하는 타이머 */
            vTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerCallback), userInfo: nil, repeats: true)
        }
    }
    
    /** 타이머 종료버튼 클릭 */
    func onTimerEnd(_ sender: Any) {
        if let timer = vTimer {
            if(timer.isValid){
                timer.invalidate()
            }
        }
        
        totalTime = 0
    }
    
    //타이머가 호출하는 콜백함수
    @objc func timerCallback(){
        totalTime -= 1
        print("DEBUG: \(totalTime)")
    }
}

 


 

이미지 같은지 비교 시, (기준이미지 ↔ queueElement1 비교 시)

 

같은 이미지를 보이고 있어도, 값이 다르다! .pngData()를 통해 비교해줘야 함!

 

// leftStandard.image == queueElement1.image로 하면 안되고,
if leftStandard.image?.pngData() == self.queueElement1.image?.pngData() { // 좌측 기준과 맨밑이미지가 같다면,
                score += 100 // 득점.
                print(score)
}

https://stackoverflow.com/questions/54818497/swift-compare-multiple-images-to-an-array-of-images

 

swift compare multiple images to an array of images

I have 2 UIImageViews connected to an array of images I'm trying compare both once they are displayed but doesn't seems to work. I tried using imageArray[Image Literal] and also imageArray[image1.p...

stackoverflow.com

 

 

  • Q. 화면을 그리는 작업은 DispatchQueue.main.async에서 해야 한다고 배웠는데, (저 코드를 쓰지 않고) 그냥 클릭할 때 마다 이미지 변경을 해도 똑같이 잘 된다. 혹시 차이가 무엇인가?

    → uicomponent 값이 바꼈다는건 이미 메인쓰레드다. 따라서 디스패치큐를 하지 않아도, ios에서 메인쓰레드가 알아서 해준다.

  • But,
    메인쓰레드에 위치해 있지 않고, (백그라운드 같은) 다른 쓰레드에 가 있을 때 DispatchQueue.main.async를 통해 화면을 그려줌. (네트워크 등에서 활용될 일이 많다.)

  • 참고 : 메인 액터

 

오디오 파일 재생 방법

https://zeddios.tistory.com/269

 

iOS ) local에 있는 오디오파일 재생하기

안녕하세요 :) Zedd입니다. 네..............리젝이 벌써 4번째인가요..?네.....다른앱을 만들어야 하는지 ㅠㅠㅠ 열심히 만든건데.. 이것때문에 하루종일 메일함만 들여다보고 있네요 XD.... 이제 iOS글

zeddios.tistory.com

 

 


세번째 페이지

  • ? 버튼 클릭 시, 알람 띄우기 - 최종점수 계산식 표시

: 최종 점수 = 획득 점수 + 게임 진행 시간(1초당 1점 | 최소 0점 ~ 최대 60점)

https://urbangy.tistory.com/21

 

간단한 Swift 알람 띄우기

간단한 알림 메세지를 띄우는 방법을 알아보쟈! 먼저 알림에 띄우고 싶은 메세지를 정의한다. key, value 를 받아서 보여줄 메세지를 정의해보았다. let msg = "key : \(key) , value : \(value)" 이제 UIAlertCon..

urbangy.tistory.com

 


 

프로젝트에 사용된 전체 코드 아래 링크에서 확인할 수 있습니다.

https://github.com/SuminPark-developer/4week_DivisionGame

 

GitHub - SuminPark-developer/4week_DivisionGame: iOS 4주차 스터디 - 순발력 구분 게임(Thread : DispatchQueue)

iOS 4주차 스터디 - 순발력 구분 게임(Thread : DispatchQueue). Contribute to SuminPark-developer/4week_DivisionGame development by creating an account on GitHub.

github.com

 

반응형