0

UIPanGestureRecognizer を使用してビュー内のイメージビューを移動し、UISwipeGestureRecognizer を使用してイメージビューをビューから削除しています。ここに私のコードがあります。

- (void)viewDidLoad
{

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
panRecognizer.delegate = self;
[imgView1 addGestureRecognizer:panRecognizer];
[panRecognizer release];


UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
swipeRecognizer.delegate = self;
swipeRecognizer.direction = (UISwipeGestureRecognizerDirectionLeft | 
                             UISwipeGestureRecognizerDirectionRight);
[imgView1 addGestureRecognizer:swipeRecognizer];
[swipeRecognizer release];
}

-(void)handleSwipe:(UITapGestureRecognizer *)recognizer{
NSLog(@"swipe");
UIView *viewGes = [recognizer view];

[viewGes removeFromSuperview];
}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {

NSLog(@"handlePan");
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
                                     recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

if (recognizer.state == UIGestureRecognizerStateEnded) {

    CGPoint velocity = [recognizer velocityInView:self.view];
    CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));
    CGFloat slideMult = magnitude / 200;

    float slideFactor = 0.1 * slideMult; // Increase for more of a slide
    CGPoint finalPoint = CGPointMake(recognizer.view.center.x + (velocity.x * slideFactor), 
                                     recognizer.view.center.y + (velocity.y * slideFactor));
    finalPoint.x = MIN(MAX(finalPoint.x, 0), self.view.bounds.size.width);
    finalPoint.y = MIN(MAX(finalPoint.y, 0), self.view.bounds.size.height);

    [UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
        recognizer.view.center = finalPoint;
    } completion:nil];
}
}

しかし、私の問題のスワイプジェスチャが正しく機能していません。電話がかかってくることもあれば、そうでないこともあります。しばらくスライドして画像を移動してから、画像を削除します。両方のジェスチャーを正しく一緒に処理する考えがある人はいますか?

4

2 に答える 2

2

<UIGestureRecognizerDelegate>クラスがプロトコルに準拠していることを確認してください。

このデリゲート メソッドを (このレコグナイザーを使用するクラスに) 追加してみてください。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
于 2012-06-08T10:16:40.050 に答える
0

すべての画像ビューのユーザー操作が次のように有効になっていることを再確認してください。

[imgView1 setUserInteractionEnabled:YES];
于 2013-06-23T08:56:48.087 に答える