1

こんにちは、

画面に3つのUIScrollViewがあるビューがあります。ユーザーがiPhoneを振るたびに、UIScrollViewsを別の位置にランダムにスクロールしたいのですが、それを実行できません。

シェイクジェスチャを検出して処理するために、ViewControllerクラスに次の実装を行いました。3つのUIScrollViewも同じクラスに属しています。シェイクジェスチャは検出されますが、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");
    }
}

ありがとうございました

4

3 に答える 3

0

nextImageView変数をチェックして、それが正しいかどうかを確認しましたか?

さらに、スロットマシンの動きを試している場合は、scrollViewを使用して自分で行うのではなく、UITableViewを使用することをお勧めします。

于 2010-08-09T15:14:25.550 に答える
0

まだSetContentOffset代わりに使ってみましたか?scrollRectToVisible

tableViewの画像の高さが等しい場合、「要素」ごとのオフセットは常に同じです。

[scrollView3 setContentOffset:yourRandomOffsetInPixels animated:YES];

多分これはうまくいきます。また、問題は、シェイク検出メソッドが別のスレッドで実行されることである可能性があることも考慮してください。motionEndedこれは、次のようにメインスレッドでメソッドを呼び出す必要があることを意味します。

[self performSelectorOnMainThread:@selector(motionEnded) withObject:nil waitUntilDone:NO];
于 2010-08-09T15:17:47.353 に答える
0

簡単な質問が1つだけあります。サンプルコードでは、ランダムタグを生成します。

randomTag = arc4random() % [dirContents count];

しかし、特定のタグ値(この場合は4)を使用しますか?randomTag値を使用しても、まだ機能しないと思いますか?そして、あなたはちょうどいくつかのテストをしていましたか?

 nextImageView = [[scrollView2 viewWithTag:4] frame];
于 2010-08-09T15:17:55.143 に答える