motionEnded正常工作,直到我单击webView中的链接

时间:2010-06-30 10:59:31

标签: iphone shake

我正在使用此代码进行摇动检测,并且大多数情况下都能正常工作:

    - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
 if (event.type == UIEventSubtypeMotionShake) {
  if ( event.subtype == UIEventSubtypeMotionShake )
  {
   NSLog (@"Shake Called");
  }  
 }

我相信为了这个工作,我也需要使用这些,我有:

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

- (void)viewDidDisappear:(BOOL)animated {
    [self resignFirstResponder];
    [super viewDidDisappear:animated];
}

这一切都很有效,每次摇动都会调用motionEnded,直到我点击我程序中webView的链接。我可以在视图中向上和向下滚动并且摇动仍然有效,但是一旦视图加载新页面,当我摇动时motionEnded就会停止被调用。这在模拟器和真实设备(iPhone 3G,iOS4)上都会发生。从我有限的理解,我相信它与第一响应者有关,但我可能在那里错了!

2 个答案:

答案 0 :(得分:2)

我设法回答了我自己的问题。对于可能有类似问题的其他人的参考,问题是一旦您单击webView中的链接(或编辑文本框或某些类似的操作),viewController就不再是第一个响应者。为了解决我的问题,答案是在新页面加载后再次使viewController成为第一个响应者:

    - (void)webViewDidFinishLoad:(UIWebView *)nameOfWebView {
    [self becomeFirstResponder];
}

答案 1 :(得分:0)

我有同样的问题,但在网页视图加载完成后成为第一个转发器并不能解决它。我知道在加载新页面时会调用webViewDidFinishLoad,并且当我通过点击它然后摇动或模拟摇动来聚焦Web视图时,我也知道调用了motionEnded。