Ограничить UIPanGestureRecognizer до 1 объекта в 1 раз в массиве - PullRequest
0 голосов
/ 07 марта 2012

Как отключить панорамирование, когда другой объект в данный момент использует его? Например, когда я панорамирую на 1 объекте, другой объект не должен двигаться. В настоящее время я могу панорамировать 2 объекта.

Другой способ - установить минимальное касание панорамирования на 2, чего я не хочу.

Мой основной код:

    UIPanGestureRecognizer *imagePanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveImage:)];
    imagePanGesture.delegate = self;
    [tempImageView addGestureRecognizer:imagePanGesture]; 

    [currentImageArray addObject:tempImageView];



- (void)moveImage:(UIPanGestureRecognizer *)recognizer 
{
    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];
    } 
}

Я понял, как это сделать. Перед панорамированием сравните вид.

if(recognizer.view == [currentImageArray objectAtIndex:iCurrentImageTag])

Ответы [ 2 ]

0 голосов
/ 30 января 2015

Правильный способ сделать это - делегат GestureRecognizer:

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIGestureRecognizerDelegate_Protocol/index.html

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
0 голосов
/ 20 марта 2012

я разобрался, как это сделать. Перед панорамированием сравните вид.

if(recognizer.view == [currentImageArray objectAtIndex:iCurrentImageTag])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...