아이폰 3.0 SDK 부터는 accelerometer를 사용하지 않고도 UIResponder에 추가된 motion 이벤트 처리 메소드를 구현함으로써 간단하게 사용자의 흔들기 동작을 체크할 수 있습니다. 저도 처음 사용해 보면서 간단한 내용들을 정리해 보았습니다.
1. First responder 되기
사용자의 흔들기 이벤트를 처리할 ViewController는 그 자신이 First responder가 되어야 합니다. becomFirstResponder 메소드를 호출하고 canBecomeFirstResponder 메소드에서 YES를 반환합니다.
viewDidAppear는 코드에서 서브뷰로 추가될 때만 호출됩니다. IB에서 바로 Window에 View를 추가하였으면 awakeFromNib등의 메소드에서 becomFirstResponder를 호출하셔야 합니다.
2. motion 메소드 구현
이후로는 간단합니다. 사용자의 흔들기가 시작되면 해당 motionBegan이 호출되고 종료될 때 motionEnded가 호출됩니다. 지나치게 많이 흔들거나 하여 유효하지 않은 흔들기로 판단될 때는 motionCancelled가 호출됩니다.
motionEnded 메소드에 사용자의 흔들기가 끝난 후 실행할 코드를 추가하면, 간단하게 흔들기를 지원할 수 있습니다.
1. First responder 되기
사용자의 흔들기 이벤트를 처리할 ViewController는 그 자신이 First responder가 되어야 합니다. becomFirstResponder 메소드를 호출하고 canBecomeFirstResponder 메소드에서 YES를 반환합니다.
- - (void)viewDidAppear:(BOOL)animated {
- [super viewDidAppear:animated];
- [self becomeFirstResponder];
- }
- - (BOOL)canBecomeFirstResponder {
- return YES;
- }
viewDidAppear는 코드에서 서브뷰로 추가될 때만 호출됩니다. IB에서 바로 Window에 View를 추가하였으면 awakeFromNib등의 메소드에서 becomFirstResponder를 호출하셔야 합니다.
2. motion 메소드 구현
이후로는 간단합니다. 사용자의 흔들기가 시작되면 해당 motionBegan이 호출되고 종료될 때 motionEnded가 호출됩니다. 지나치게 많이 흔들거나 하여 유효하지 않은 흔들기로 판단될 때는 motionCancelled가 호출됩니다.
- - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
- NSLog(@"Shaking start");
- }
- - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
- NSLog(@"Shaking end");
- }
- - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
- NSLog(@"Shaking cancel");
- }
motionEnded 메소드에 사용자의 흔들기가 끝난 후 실행할 코드를 추가하면, 간단하게 흔들기를 지원할 수 있습니다.
'iOS > 자잘한 팁' 카테고리의 다른 글
Storyboards are unavailable on iOS 4.3 and prior 오류 (0) | 2011.12.08 |
---|---|
소소한 팁 1 (1) | 2010.01.08 |
아이폰 흔들기(shaking) 검사 (8) | 2009.09.29 |
한글 인코딩 변경과 구글날씨 RSS (14) | 2009.09.11 |
NSURLConnection으로 웹페이지 내용 가져오기 (12) | 2009.07.03 |
UIViewController의 setEditing 메소드 (0) | 2009.06.26 |
좋은 포스트 내용 잘 보았습니다.
질문이 하나 있습니다.
아이폰을 흔드는 것에 대해
motionBegan, motionEnded, motionCancelled 등의 이벤트가 발생한다고 하셨는데요.
저는 이런 이벤트가 존재하는지 조차 알기 어렵네요..
상황에 맞는 이런 이벤트들의 리스트를 쪼로록 볼 수 있는 방법이 있나요?
Visual Studio 환경에 익숙한 저로서는 OnKeyDown 같은 On~~ 으로 시작하는 이벤트 리스트 같은 것을 기대하고 있습니다.
ESC나 F5 키를 누르시면 일치하는 메소드 리스트를 볼 수 있습니다. Help 메뉴의 리서치 어시스턴트를 활용하시면 관련 문서를 좀 쉽게 찾을 수 있습니다.
언제나 좋은 내용만 알려주시는 쩔님^^
가끔 들어와서 업데이트 되엇나 쳐다보고 갑니다.
저도 맥을 사용하는 유저인데...쩔님에게 많이 배우고 있습니다.
항상 좋은 내용 많이 많이 올려주세요^^
또 왔습니다 ^^
아이폰 구매신청한상태인데 않오는군요 ㅎㅎ
뭐 와도.. 구지 만들어서 테스트해볼만한게 없지만 ㅎㅎ
좋은 강좌또보고갑니다 ^^
아.. 그리고 결혼한답니다 ^^
이리저리 인터넷에 아는 지인께 글남기는중.
코코아데브님에게도 소식을 ㅋㅋ
http://www.icarusx.com/icarusx/index.php?BD_NO=1023
좋은 하루되세요 ㅎ
이카루스님은 좋은 소식 풍년이네요. 이번에 예약하셨군요. 전 나중에 사기로 했습니다.

가장 좋은 소식은 결혼 소식이네요. 축하드리며 행복한 가정 꾸리시기 바랍니다.
안녕하세요
이 메소드를 cocos2d에서 사용할려면 어떻게 사용해야하는지 알려주실수있으신지요
ViewController에서 받는 메시지니 해당 뷰클래스를 하나 만드셔야 될 것 같습니다. 구조를 어떻게 하실지 모르겠지만 cocoas2d의 Director에서 attach하는 뷰에 뷰컨트롤러를 만들어서 해당 메시지를 받으시면 될 것 같습니다.
2017년에도 이글이 유효하네요. shake 잘 동작하네요. ^^