1

UIView画面上のジェスチャをリッスンしているトランジション メソッドに問題があります。

左スワイプまたは右スワイプを行うと、@selector メソッドに左右のスワイプ信号が送信されます。つまり、スワイプを区別できません。

問題のコードは次のとおりです。いくつかの異なることを試しましたが、これを正しく行うことができないようです。

- (void) setupSwipeGestureRecognizer {
        UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedScreen:)];
        swipeGesture.direction = (UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight);
        [self.view addGestureRecognizer:swipeGesture];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.title = @"Prototype";
    //Initalizse the swipe gestuer listener
    [self setupSwipeGestureRecognizer];

    //alloc and init
    self.detailViewA = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]]; 
    self.detailViewB = [[DetailViewControllerB alloc]initWithNibName:@"DetailViewControllerB" bundle:[NSBundle mainBundle]];

    // set detail View as first view
    [self.view addSubview:self.detailViewA.view];

    // set up other views
    [self.detailViewB.view setAlpha:1.0f];

    // Add the view controllers view as a subview
    [self.view addSubview:self.detailViewB.view];

    // set these views off screen (right)
    [self.detailViewB.view setFrame:CGRectMake(320, 0, self.view.frame.size.width, self.view.frame.size.height)];    
}


- (void)swipedScreen:(UISwipeGestureRecognizer*)gesture
{
    if (gesture.direction = UISwipeGestureRecognizerDirectionLeft) {
        NSLog(@"Left");
    }
   if (gesture.direction = UISwipeGestureRecognizerDirectionRight){
       NSLog(@"Right");
   }

}
4

4 に答える 4

3

同様の質問hereおよびhere

メソッドへのパラメータswipedScreen:は、タイプUISwipeGestureRecognizer、つまり、コールバックが呼び出される原因となった認識エンジンです。ユーザーが行った実際のジェスチャーを指すものではありません。あなたの場合direction、この認識エンジンのプロパティをに設定します(UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight)-これは変更されません。

各方向に 1 つずつ、合計 2 つの認識機能を作成する必要があります。

于 2012-05-30T08:52:35.450 に答える
2

このコードを試してください:

(void)swipedScreen:(UISwipeGestureRecognizer*)gesture {
    if (gesture.direction == UISwipeGestureRecognizerDirectionLeft) {
        NSLog(@"Left");  
    }
    if(gesture.direction == UISwipeGestureRecognizerDirectionRight) {
        NSLog(@"Right");
    } 
}
于 2012-05-30T08:36:35.110 に答える
0

if 条件を正しく比較していません。比較演算子として == が必要です。= を使用しているため、条件が常に真になります。

于 2012-05-30T08:24:23.237 に答える