2011-04-18 3 views
0

도움이 필요하고 해결 방법이 필요합니다. 기본적으로 나는 가속도계를 사용하여 다른 뷰로 전환하는 뷰를 가지고 있습니다. 문제는 한 번만 작동한다는 것입니다. 첫 번째보기로 돌아 가면 가속도계가 프로젝트를 다시 작성할 때까지 다시 작동하지 않습니다. 도움의 모든 종류가 많이 주시면 감사하겠습니다보기를 전환 할 때 UIAccelerometer가 두 번 이상 작동하는 경우

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {  
float aX = ABS(acceleration.x); 
float aY = ABS(acceleration.y); 
float aZ = ABS(acceleration.z); 
if(sqrt(aX*aX+aY*aY+aZ*aZ)>1.5f) 
{ 
    SecondViewController *screen = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    //screen.words = self.easy; 
    [self presentModalViewController:screen animated:YES]; 
    [screen release]; 
self.accelerometer.delegate = nil; 
} 

:

은 내가 사용하는 방법입니다.

+1

왜 self.accelerometer.delegate = nil을 설정합니까? 다른 시각으로 전환하면? 문제를 일으킬 수 있습니다. –

+0

"accelerometer : didAccelerate"함수가 매번 호출되기 때문에 현재 전환이 실행 중일 때 전환을 시작하려고하기 때문에 설정하지 않으면 오류가 발생합니다. –

+0

다시 한번 가속도계 대의원을 지정 하시겠습니까? 즉, viewDidLoad/viewWillAppear/viewDid 어느 곳에 있든 상관없이, self.accelerometer.delegate = self와 같이 넣을 수 있습니다. 나는 이것이 당신을 위해 일해야한다고 생각합니다. –

답변

0

일시적 새 뷰 컨트롤러를 제공 할 때 가속도계 처리를 해제하고 호출 피하기 위해 BOOL을 설정할 수 self.accelerometer.delegate = 전무

모달 전환이 완료되면, 당신은을 다시 활성화 할 수 있습니다 처리 가속도계

편집 - 예 : - 당신은 또한 가속도계 delagate의 t을 다시 설정해야합니다 또한

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {  

if(accelerometerEnabled) { 

    //... the accelerometer data handling goes here 
} 

, 내가 원래 질문을 모두 이해하지 않았다처럼 보인다 o 가속 데이터를 처리하기 위해 사용할보기 컨트롤러. 그 (두 번째) 뷰 컨트롤러는 - (void) 가속도계 위임 메소드를 가져야합니다.

또는 루트보기 컨트롤러에서 가속 데이터를 처리하고 해당 루트보기의 하위보기를 만들 수도 있습니다. 가속기를 처리하는 컨트롤러를 변경하지 않아도되므로 더 깨끗합니다.

+0

이 작업을 수행하는 방법에 대한 예제를 보여줄 수 있습니까? 나는 확실히 모른다. –

관련 문제