2013-09-26 6 views
11

나는 UIGestureRecognizersSKScene/SKNode'sSpriteKit으로 실험하고 있습니다. 한 가지 문제가 있었지만 해결하기가 어려웠지만 한 가지를 혼란스럽게합니다. 필자는 사용자가 화면에 스프라이트를 끌 수있는 팬 제스처 인식기를 가지고 있습니다.SKScene의 UIPanGestureRecognizer

내가 가진 하나의 문제는 제대로 작동에 만 두 번째로 두 드릴 후 실제로 팬 제스처를 초기화 ONE 탭을 소요하고 있다는 점이다. 내 팬 제스처가 touchesBegan에서 초기화되기 때문이라고 생각하고 있어요. 그러나, 나는 실제로 작업에서 SKScene의 initWithSize 방법에 제스처 인식기를 멈췄다 초기화 이후 넣어 위치를 다른 모른다. 화면이 적어도 한 번 탭 때까지 제스처가 존재하지 않는 있도록 터치의 제스처를 추가하고 있기 때문이다

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    if (!self.pan) { 

     self.pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(dragPlayer:)]; 
     self.pan.minimumNumberOfTouches = 1; 
     self.pan.delegate = self; 
     [self.view addGestureRecognizer:self.pan]; 
    } 
} 

-(void)dragPlayer: (UIPanGestureRecognizer *)gesture { 

     CGPoint trans = [gesture translationInView:self.view]; 

     SKAction *moveAction = [SKAction moveByX:trans.x y:-trans.y duration:0]; 
     [self.player runAction:move]; 

     [gesture setTranslation:CGPointMake(0, 0) inView:self.view]; 
    } 

답변

11

는 시작했다. 또한, 당신이 실제로 initWithSize 사용하고 있는지 확인하는 것입니다 : 당신의 이니셜로, 당신이 거기 제스처를 추가하는 문제가 없어야하기 때문이다.

또 다른 옵션은 장면이 발표 된 후 즉시 호출되는 -[SKScene didMovetoView:]에 제스처를 추가하는 코드를 이동하는 것입니다. 더 많은 정보 in the docs.

- (void)didMoveToView:(SKView *)view 
{ 
    [super didMoveToView:view]; 
    // add gesture here! 
} 
1

이것은 내 첫 번째 게시물입니다. ... 내 자신의 발가락을 통해

안녕 얘들 아를 여행하지 바라고, 그래서 UISwipeGestureRecognizer가 작동하지 않는 문제를 가지고 있었다. 내 initWithSize 메소드에서 초기화 했으므로이 게시물을 기반으로 내 didMoveToView 메소드로 이동했습니다. 이제 작동합니다 (감사 0x7fffffff). 내가 한 것은 한 가지 방법으로 다음 두 줄을 잘라내어 다른 한 줄에 붙여 넣는 것뿐입니다. 내 "조사"에서

_warpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(warpToNextLevel:)]; 
[self.view addGestureRecognizer:_warpGesture]; 

나는 어떠한 경우에도 난 그냥로 설정 거라고하지만 ...

self.view.userInteractionEnabled = YES; 
NSLog(@"User interaction enabled %s", self.view.userInteractionEnabled ? "Yes" : "No"); 

이 로그 것을 userInteractionEnabled을 가로 질러 오지 내 initWithSize 방법에 YES로 설정하려 예. 추가 조사를 통해 수동으로 userInteractionEnabled를 설정하지 않으면 initWithSize 중에는 아무 것도 아니며 원하는 경우이를 변경할 수없는 것 같으며 didMoveToView에 자동으로 YES로 설정됩니다.

이 모든 것이 관련이 있다고 생각하지만, 알고있는 사람이 여기서 무슨 일이 일어나고 있는지 설명하는 것이 좋습니다. 감사!