아이폰 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 |
한글 인코딩 변경과 구글날씨 RSS (14) | 2009.09.11 |
NSURLConnection으로 웹페이지 내용 가져오기 (12) | 2009.07.03 |
UIViewController의 setEditing 메소드 (0) | 2009.06.26 |