2013-07-26 4 views
2

내가 일반 OpenGL을/EAGL 설치가 진행이 작동하지 않음 : 구현 touchesEnded/취소 /뿐만 아니라iOS의 멀티 터치는

@interface EAGLView : UIView { 
@public 
    EAGLContext* context; 
} 
@property (nonatomic, retain) EAGLContext* context; 
@end 

@implementation EAGLView 
@synthesize context; 
+ (Class)layerClass { 
    return [CAEAGLLayer class]; 
} 
@end 

@interface EAGLViewController : UIViewController { 
@public 
    EAGLView* glView; 
} 
@property(nonatomic, retain) EAGLView* glView; 
@end 

@implementation EAGLViewController 
@synthesize glView; 

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 
    for (UITouch* touch in touches) { 
     CGPoint location = [touch locationInView:glView]; 
     int index; 
     for (index = 0; index < gCONST_CURSOR_COUNT; ++index) { 
      if (sCursor[index] == NULL) { 
       sCursor[index] = touch; 
       break; 
      } 
     } 
    } 
    [super touchesBegan:touches withEvent:event]; 
} 

을 이전 상응 포함. 코드가 제대로 작동하고 잘 추적됩니다.

나는 또한 모든 것을 적절한 값을주는거야 있는지 확인하십시오

sViewController = [EAGLViewController alloc]; 

CGRect rect = [[UIScreen mainScreen] applicationFrame]; 
sViewController.glView = [[EAGLView alloc] initWithFrame:CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height)]; 
Assert(sViewController.glView); 
sViewController.glView.userInteractionEnabled = YES; 
sViewController.glView.multipleTouchEnabled = YES; 
sViewController.glView.exclusiveTouch = YES; 

을 그것은 모두가 잘 컴파일,하지만 난 결코 이상의 UITouch를 수신하지거야. 단 하나의 touchesBegan을 의미하는 것은 아니지만 색인은 0을지나 가지 않습니다. 두 번째 손가락이 그 기능을 시작하면 두 번째로 중단 점을 설정하고 손가락 두 개를 놓으면 트리거가되지 않습니다.

답변

0

: 나는 제스처를 처리하고 있습니다로

sViewController.view = sViewController.glView; 
+0

왜이 줄을 추가하면 문제가 해결되었는지 설명해주십시오. – rgettman

+0

보기가보기 컨트롤러와 직접 연결되어 있지 않은 것으로 보입니다. 멀티 터치가 제대로 작동하지 않았습니다. –

0

여러 번 터치하거나 (예 : 한 손가락, 두 손가락 등 터치를 구분하려는 경우) UIPanGestureRecognizer를 사용해보십시오. 설정시 터치의 최소 및 최대 수를 지정할 수 있습니다. 그런 다음 터치를 감지하려는보기에 첨부하십시오. 이벤트를 받으면 얼마나 많은 터치를 받았는지 물어 볼 수 있습니다. 여기

는 사과의 문서를 :

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIPanGestureRecognizer_Class/Reference/Reference.html

이렇게하면, 당신이 gesturerecognizer, touchesBegan을 설정 한 방법에 따라 모두에 touchesBegan 이동// 종료 방법을 사용하는 것이 필요하지 않을 수도 있습니다/Moved/Ended가 호출되지 않을 수 있습니다.

+0

정말, 종단/이전 touchesBegan를/사용해야은/낮은 수준 (게임 엔진)에 감동. 현재 다른 플랫폼에서 작동합니다. –

+0

당신은 touchesMoved에서도 여러 번의 터치를 확인하고 있습니까? –

+0

예. 'touchesMoved'는 하나 이상의 터치를 제기하지 않습니다. 만약 그렇다면, 특정 UITouch로'touchesBegan'이 먼저 실행되기를 기대하기 때문에 코드가 충돌 할 수도 있습니다. –

0

touches 대신 [event allTouches]을 사용하십시오. touches은 '변경'된 터치 만 나타냅니다. 사과 문서에서 : 마지막 단계 이후 변경되지 않은 접촉에 관심이 있거나이 의 접촉과는 다른 단계에있는 경우

는 전달 된 세트, 당신은 사람들을 찾을 수 있습니다 이벤트 객체. 그림 3-2 은 터치 객체가 포함 된 이벤트 객체를 나타냅니다. 이 터치 객체를 모두 얻으려면 이벤트 객체에서 allTouches 메서드를 호출합니다. 내가 잃어버린 모든이가 있었다 것

+0

불행히도,이 말은 'touchesBegan'이 두 번째 손가락에 대해 발사되지 않는 이유를 설명하지 않습니다. –