Выборочное удаление пользовательского распознавателя жестов

Я хочу удалить жест пользовательского распознавателя для просмотра изображений. Это одно вращение пальца от Керби Тернера.

-(void) enableRotation{
[[self mainImageView] setUserInteractionEnabled:YES];
[self addRotationGestureToView:[self mainImageView]];
    //[self addTapGestureToView:[self mainImageView] numberOfTaps:1];
}

- (void)addTapGestureToView:(UIView *)view numberOfTaps:(NSInteger)numberOfTaps
{
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tap setNumberOfTapsRequired:numberOfTaps];
[view addGestureRecognizer:tap];
 }

- (void)addRotationGestureToView:(UIView *)view
{
NSLog(@"'Adding KT Rotation recognizer to the rotation");
KTOneFingerRotationGestureRecognizer *rotation = [[KTOneFingerRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotating:)];
[view addGestureRecognizer:rotation];
 }


- (void)rotating:(KTOneFingerRotationGestureRecognizer *)recognizer
{
UIView *view = [recognizer view];
[view setTransform:CGAffineTransformRotate([view transform], [recognizer rotation])];
}


- (void)removeRotationGestureFromView: (UIImageView *) imgView {
//UIRotationGestureRecognizer *rotate = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationRemoved:)];
//[imgView removeGestureRecognizer:rotate];
KTOneFingerRotationGestureRecognizer *rotation = [[KTOneFingerRotationGestureRecognizer alloc] init];


while(self.mainImageView.gestureRecognizers.count){
    [self.mainImageView removeGestureRecognizer:[self.mainImageView.gestureRecognizers objectAtIndex:0]];
    //[self.mainImageView removeGestureRecognizer:rotation];
}
NSLog(@"Trying to remove rotation on this gesture");
}

Я называю это в пользовательской вкладке плитки

 if(rotationToggle%2==0){
            [self enableRotation];
            NSLog(@"%d", rotationToggle);
        }
        else{
            [self removeRotationGestureFromView:self.mainImageView];
                            NSLog(@"%d", rotationToggle);
        }
        rotationToggle +=1;

где RotationToggle является статическим Int.

Как я могу удалить только один распознаватель жестов. Текущий метод удаляет все распознаватели в представлении изображения. если я сделаю просто [imgView removeGestureRecognizer:rotate]; ИЛИ [self.mainImgView removeGestureRecognizer:rotate];

Это не работает. Заранее спасибо. Дайте мне знать, если я забыл упомянуть что-то здесь.

1 ответ

Решение

Вы создаете экземпляр нового жеста и пытаетесь удалить его вместо удаления ранее добавленного. Сохраните ссылку на предыдущую и удалите ее.

Например:

@property (nonatomic, strong) KTOneFingerRotationGestureRecognizer *rotation;

- (void)addRotationGestureToView:(UIView *)view
{
   self.rotation = [[KTOneFingerRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotating:)];
   [view addGestureRecognizer:rotation];
}

- (void)removeRotationGestureFromView:(UIImageView *)imgView {
    [self.mainImageView removeGestureRecognizer:self.rotation];
}
Другие вопросы по тегам