0

In my code, I have an area on which when users taps and holds, UILongPressGestureRecognizer causes an animation to run and at the end of animation a method gets called. (It's basically a long tap on a small area square which contains one CGPoint so that it starts a long press animation and when it finishes, the point is removed.)

The problem: On iPhone 5s,SE and 6, UILongPressGestureRecognizer works fine but on any device released after that, it gets dismissed very quickly and I have tried it on at least 11 different devices. Why is that?! I appreciate any help.

-(void)prepareLongPressGesture{
_longGesture = [[UILongPressGestureRecognizer alloc]
      initWithTarget:self
              action:@selector(handleLongGesture:)];
  _longGesture.delegate = self;
  _longGesture.allowableMovement = self.frame.size.width*0.15;
  _longGesture.minimumPressDuration = 1.0;
  [self addGestureRecognizer:_longGesture];
}

- (void)handleLongGesture:(UILongPressGestureRecognizer*)gesture {
  switch (gesture.state) {
    case UIGestureRecognizerStateBegan:
      [self removeModifiablePoint];
      break;
    case UIGestureRecognizerStateChanged:
    case UIGestureRecognizerStateEnded:
    case UIGestureRecognizerStateCancelled: {
      if (self.animatedView.superview) {
        [self.animatedView removeFromSuperview];
      }
    } break;

    default:
      break;
  }
}

- (void)removeModifiablePoint {
    CGFloat sizeOFLongPressAnimation = 0.0;

    if (IS_IPAD) {
        sizeOFLongPressAnimation = 0.15*self.frame.size.width;
    }else{
        sizeOFLongPressAnimation = 0.27*self.frame.size.width;
    }

  if (!_animatedView) {
      self.animatedView =
      [[UIView alloc] initWithFrame:CGRectMake(0, 0, sizeOFLongPressAnimation, sizeOFLongPressAnimation)];


    self.animatedView.alpha = 0.7f;
    self.animatedView.layer.borderColor = [UIColor redColor].CGColor;
    self.animatedView.layer.borderWidth = 3.f;
    self.animatedView.layer.cornerRadius = sizeOFLongPressAnimation / 2.0f;

    self.progressView = [[UIView alloc] initWithFrame:self.animatedView.bounds];
    self.progressView.backgroundColor = [UIColor redColor];
    self.progressView.layer.cornerRadius = sizeOFLongPressAnimation / 2.0f;

    [self.animatedView addSubview:self.progressView];
  }

  CGPoint center = [self.modifiablePointsArray[_modifiablePointIndex] CGPointValue];
  self.animatedView.center = center;
  [self addSubview:self.animatedView];
  self.progressView.transform =
      CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1f);

  [UIView animateWithDuration:2.f animations:^{
        self.progressView.transform = CGAffineTransformIdentity;
      }completion:^(BOOL finished) {
        if (finished) {
          [self.animatedView removeFromSuperview];
          [self.modifiablePointsArray removeObjectAtIndex:_modifiablePointIndex];
          [self setNeedsDisplay];
        }
   }];
}
Reza.Ab
  • 1,195
  • 1
  • 11
  • 21
  • I think is related with the 3D touch feature implemented since iPhone 6s you can check this https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/ – Ladd.c Mar 12 '18 at 14:05
  • @Ladd.c i thought of that but never could figure out what to do with it so that it wouldn't affect uigesturerecognizer – Reza.Ab Mar 12 '18 at 14:45

0 Answers0