2016-10-12 2 views
0

false의 초기 값을 가진 flag이라는 부울 변수가 있습니다. 성공적인 프로세스를 기반으로, 그것은 사실로 설정됩니다. 버튼 alert이 있는데, 탭하면 UI에서 회전하는 이미지와 함께 깃발의 값을 확인합니다. flag이 참이면 성공 메시지가 표시되어야합니다. 그렇지 않으면 계속 응답 점검 (5 초 동안 10 회)을 유지해야합니다.Swift에서 응답을 계속 확인하십시오

이것은 제 기능입니다. 나는 이것을 달성하기 위해 NStimer을 사용 해왔다. 다음은 코드 스 니펫입니다.

var timer = NSTimer() 
var count = 10 
var flag: Bool = false 
@IBOutlet weak var alert: UIButton! 

@IBAction func alertAction(sender: AnyObject) { 
    timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: #selector(ViewController.prints), userInfo: nil, repeats: true) 
} 

func prints(){ 
    if(count > 0) 
    { 
     if flag == false{ 
     **Spinning Image** 
      count -= 1 
     } else { 
     count = 0 
     } 

    } else { 
     timer.invalidate() 
    } 
} 

회전 이미지는 5 초마다 멈추고 계속됩니다 (응답이 5 초 이상 걸리는 경우). 나는 끊임없이 이미지를 계속 회전시키고 싶다. 누군가 도와 주실 수 있습니까?

미리 감사드립니다.

+0

당신은 당신의 응답 'FUNC 인쇄를()'호출해야합니다. – Vats

답변

1

내가 알기로이 코드는 의도 한대로 작동합니다. UIActivityIndicator를 사용하는 경우. rotationAnimation을 시작한 곳에서 시작하여 타이머를 무효화 할 때 타이머를 중지하십시오.

스위프트 3 예

@IBOutlet weak var pin: UIImageView! 
var timer: Timer? 
var count: Int = 5 
var flag: Bool { 
    return count == 0 
} 

@IBAction func buttonPressed(_ sender: AnyObject) { 
    let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation") 
    rotationAnimation.fromValue = 0 
    rotationAnimation.toValue = 2 * M_PI 
    rotationAnimation.duration = 0.6 
    rotationAnimation.isCumulative = true 
    rotationAnimation.repeatCount = Float.infinity 
    pin.layer.add(rotationAnimation, forKey: "rotate") 

    timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(prints), userInfo: nil, repeats: true) 
} 

func prints() { 
    if flag { 
     pin.layer.removeAllAnimations() 
     timer?.invalidate() 
    } else { 
     count = count - 1 
    } 
} 
+0

굉장! 고마워. 이거 효과가있어. – NKay

2

폴링은 가장 절실한 비동기 패턴이며 거의 항상 잘못된 것입니다. 가치 관측 및 반응 패턴에 대해 조금 배우십시오.

var flag = false { 
    didSet { 
    if flag { 
     // stop spinning 
    } 
    } 
} 

func alertAction() { 
    // start spinning 
} 
관련 문제