在摇动手势时实际滚动UIScrollView

时间:2010-08-09 15:03:14

标签: iphone uiscrollview shake gestures

HI,

我的视图在屏幕上有三个UIScrollViews。我希望每当用户摇动iPhone时将UIScrollViews随机滚动到不同的位置,但我无法完成它。

我在我的ViewController类中实现了以下功能来检测和处理抖动手势,3个UIScrollViews也属于同一个类。检测到摇动手势,但UIScrollViews不会更改。我做错了什么?

我已尝试过motionBegan和motionEnded。

-(BOOL)canBecomeFirstResponder {
    return YES;
}

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

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

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (motion == UIEventSubtypeMotionShake)
    {
  int randomTag = arc4random() % [dirContents count];

  CGRect nextImageView = [[scrollView1 viewWithTag:2] frame];
  [scrollView1 scrollRectToVisible:nextImageView animated:YES];

  randomTag = arc4random() % [dirContents count];
  nextImageView = [[scrollView2 viewWithTag:4] frame];
  [scrollView2 scrollRectToVisible:nextImageView animated:YES];

  randomTag = arc4random() % [dirContents count];
  nextImageView = [[scrollView3 viewWithTag:4] frame];
  [scrollView3 scrollRectToVisible:nextImageView animated:YES];
  NSLog(@"Shake Detected End");
    }
}

谢谢

3 个答案:

答案 0 :(得分:0)

您是否检查过nextImageView变量以查看它是否正确?

如果你正在尝试将有老虎机的动作,我会建议你使用UITableView,而不是自己用scrollView做它

答案 1 :(得分:0)

您是否尝试过使用SetContentOffset代替scrollRectToVisible

如果tableView中的图像高度相等,则每个“元素”的偏移量始终相同。

[scrollView3 setContentOffset:yourRandomOffsetInPixels animated:YES];

也许这有效。 还要考虑,问题可能是您的摇动检测方法在单独的线程上运行这意味着您必须在主线程上调用您的motionEnded方法,如下所示:

[self performSelectorOnMainThread:@selector(motionEnded) withObject:nil waitUntilDone:NO];

答案 2 :(得分:0)

只是一个简单的问题。在您的示例代码中,您生成一个随机标记:

randomTag = arc4random() % [dirContents count];

但是你使用特定的标签值(在这种情况下为4)?我认为当你使用randomTag值时它仍然不起作用?而你刚刚做了一些测试?

 nextImageView = [[scrollView2 viewWithTag:4] frame];