2014-07-17 2 views
0

무기를 다시로드 할 게임을 연기 한 후에 메소드를 호출하고 싶습니다.하지만 그렇게하면 셀렉터가 일시 중지되지 않는 게임이 일시 중지되어 사용자가 일시 중지하여 속일 수 있습니다.performSelector afterDelay를 일시 중지했다가 다시 시작 하시겠습니까?

그래서 일시 중지하고 계속 진행하는 방법이 있는지 궁금합니다.

나는이 선택기를 취소하는 방법을 알고 있습니다 : cancelPreviousPerformRequestsWithTarget:하지만 사용자가 게임을 다시 시작한 후에 계속할 수 있기를 바랍니다.

이 방법이 맞나요? 아니면 다른 전략을 고려해야합니까?

+0

어쩌면 당신은 http://stackoverflow.com/a/11984865/513286 – cekisakurek

+0

같은 것을 사용할 수 있습니다. 내 머리 위로 생각할 수있는 기능을 호출하는 NSTimer가있는 사용자 지정 클래스의 개체를 만드는 것입니다 그 클래스에서 여러 차례 파이어의 마지막 수에 도달 할 때까지 리로드를 호출합니다. 하지만 CPU가 무거워 보입니다. – Arbitur

+0

게임에 사용할 총체적인 타이머가 있습니까? 게임이 실행될 때마다 게임 상태가 증가하고 변경됩니다. – Wain

답변

0

이 방법은이 문제를 해결하는 좋은 방법은 아니지만 나에게 트릭입니다. 스케일 애니메이션이 있는데, 뷰가 6.0 배로 커지고 2 초를 기다린 다음 다시 1.0으로 축소됩니다. 2 초 동안 기다리는 것은 performSelector : withObject : afterDelay :를 일시 중지 할 수없는 부분을 사용합니다.

일시 정지 부분입니다 : (그것은 그 작은 변화이다, 당신은 늘 참조) 나는 0.001를 추가하는 이유

[UIView animateWithDuration:0 delay:2.0 options:0 animations:^{ 
    self.transform = CGAffineTransformMakeScale(6.0 + 0.001, 6.0 + 0.001); 
} completion:^(BOOL finished) { 
    [self animateOutWithCompletion:completion]; 
}]; 

당신이 변화 애니메이션 있는지 확인, 이잖아.

@interface UIView (AnimationsHandler) 

- (void)pauseAnimations; 
- (void)resumeAnimations; 

@end 

@implementation UIView (AnimationsHandler) 
- (void)pauseAnimations 
{ 
    CFTimeInterval paused_time = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
    self.layer.speed = 0.0; 
    self.layer.timeOffset = paused_time; 
} 

- (void)resumeAnimations 
{ 
    CFTimeInterval paused_time = [self.layer timeOffset]; 
    self.layer.speed = 1.0f; 
    self.layer.timeOffset = 0.0f; 
    self.layer.beginTime = 0.0f; 
    CFTimeInterval time_since_pause = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - paused_time; 
    self.layer.beginTime = time_since_pause; 
} 

이 코드를 자유롭게 사용하지만, 내가 전에 말했듯이이 문제를 해결하는 좋은 방법이 아니다 :

UIView의 애니메이션이 범주를 사용하여 일시 정지 할 수 있습니다. UIView 애니메이션이 작동하는 방식과 이러한 애니메이션을 일시 중지 할 수있는 가능성을 활용하는 것입니다.