2016-09-22 5 views
0

그래서 카운트 다운 앱을 가지고 있고 카운트 다운의 다른 포맷을 가지고 있습니다. 여기에는 특정 날짜까지의 시간 (분)이 포함됩니다. 한 번에 하나의 변수 만 표시하려고합니다. 스위프트 (Swift) - 순서대로 탭에 다른 텍스트를 표시하는 방법

는 그래서 갈 것 : 일 TAP 분의 TAP의 시간 TAP 초 다음

초는 다시 시작에 간다 테이프되면. 그래서 그것은 초 TAP 일 가고 반복 해 유지할 것입니다.

제스처 인식기를 사용해 보았지만 격변 적으로 막혔습니다. 도와주세요.

답변

1

나는 솔직한 해결책을 제시 할 것입니다.

먼저,이 순간에 보여주는있는 일을 나타내는 열거 만들 : 당신,에게 실제로

var currentMode = CountDownMode.Days 

을 그리고 그런 다음

enum CountDownMode { 
    case Days, Minutes, Hours, Seconds 
} 

를 컨트롤러에이 같은 변수를 선언 이러한 간단한 접촉을 인식하기 위해 제스처 인식기를 사용할 필요가 없습니다. 그냥 touchesBegan를 오버라이드 (override) :

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

} 

touchesBegan에서 currentMode의 값을 사용하여, 당신은 쉽게 옆에 어떤 모드 파악하고 그에 따라 텍스트를 변경할 수 있습니다

switch currentMode { 
case .Days: 
    // change text here 
    currentMode = .Minutes 
case .Minutes: 
    // change text here 
    currentMode = .Hours 
case .Hours: 
    // change text here 
    currentMode = .Seconds 
case .Seconds: 
    // change text here 
    currentMode = .Days 
} 
1

가능한 한이 솔루션을 단순화합니다.

버튼을 넣고 탭에 코드를 처리하면 (제스처 인식자를 분명히 할 필요가 없음) 상태에 따라 텍스트를 변경할 수 있습니다. 기본적으로 몇 분이 걸리며, 수면 상태는 몇 시간으로 바뀝니다.

상태를 변경하는 방법은 무엇입니까? 열거 형 등을 사용합니다. state += 1

+0

그것은 라벨 수 있습니다. – Alex

+0

큰 문제가 아니라 레이블 위에 버튼을 놓고 'label.center = button.center, label.width = button.width, label height = button.height'와 같은 자동 레이아웃으로 맞 춥니 다. – Traveler

0

제스처 인식기를 유지하려면 init의 0에서 시작하는보기 컨트롤러가 보유하는 형식 및 인덱스 배열을 사용할 수 있습니다. 각 탭에서 지수를 증가시키고 (모듈로를 사용하여 다시 0으로 되돌아갑니다) 배열의 현재 색인에있는 형식으로 카운트 다운의 형식을 설정하십시오.

관련 문제