2012-12-04 4 views
0

iOS6에서 흔들림을 감지하려고하는데, 모든 단일 예가 2009 년에 iOS3 용으로 작성되었거나 그렇지 않은 것으로 보입니다. 여기 내 방법이다 : 나는 (YES를 반환하는 canBecomeFirstResponder 방법을, 그리고 그것을 호출) 애플이 제안하는 어떤 시도했습니다흔들림을 감지하려고 시도합니다. motionEnded는 호출되지 않습니다.

- (void) motionEnded: (UIEventSubtype) motion withEvent: (UIEvent *) event { 
    if (motion == UIEventSubtypeMotionShake) NSLog(@"Detected a shake"); 
} 

,하지만 아무것도하지 않습니다. 괜찮 았지만 인식되지 않는 흔들림에 영향을주지 않습니다.

내보기의 사용자 지정 버전을 만드는 데 필요한 몇 가지 사항을 읽었지만 실제로 프로그래밍 방식으로보기를 만들지 않았고 그 중 4 개 정도가 있기 때문에 그럴 필요가 없습니다.

미리 감사드립니다.

+0

은 봐주십시오 http://stackoverflow.com/questions/6042420/how-to-detect-shake-motion-in-iphone#6056424 – Shad

답변

15

viewController 내부에서 caneBecomeFirstResponder 메서드를 재정의하고 viewDidAppear에서 yes로 대답해야합니다. 그러면 viewController (self)를 첫 번째 응답자로 설정해야합니다. 이것은 코드입니다 :

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
    if (motion == UIEventSubtypeMotionShake) NSLog(@"Detected a shake"); 
} 

-(BOOL)canBecomeFirstResponder { 
    return YES; 
} 


- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    [self becomeFirstResponder]; 
} 
+0

이 정확히 내가 이미 한 일이다. 주사위가 없다. – Luke

+0

나는 위의 코드를 내 장치에서 시험해 보았다. 아이폰 4S, 아이폰 5, 아이 패드 3, 아이폰 5 (IOS 5). 위의 코드는 모든 장치에서 잘 동작한다. –

+0

그런 다음 motionEnded 메서드가 호출되지 않으므로 다른 문제가 발생합니다. 그냥 정확히 무엇을 추적하려고합니다. – Luke

-2

내가보기에는 viewDidLoad와는 달리 viewDidAppear가 필요합니다. 이유는 모르겠다.

+2

답변에 대한 다른 게시물을 작성하지 않아야합니다. Giuseppe의 게시물을 정답으로 받아 들여야 했나요? – defactodeity

+0

viewDidLoad (원래 질문에서 언급하지 않은)와 viewDidAppear을 구별하는 것이 별개의 대답을 보장한다고 생각합니다. Giuseppe는 해결책을 제시했지만 실제 문제 (Load Over Appearment)를 명확히하고 싶었습니다. – Luke

+0

그렇다면 코멘트를 추가하십시오 .. – Beppe