Ios UIPangestureUIView动画故障

Ios UIPangestureUIView动画故障,ios,objective-c,animation,uiview,autolayout,Ios,Objective C,Animation,Uiview,Autolayout,我的UIView动画有一个恼人的问题。基本上,我是通过跟踪手指的位置来制作UIView旋转动画。当视图完全加载时,一切都正常工作,但是当新的数据视图内容从我的web服务传入时,如果用户拖动手指,视图就会跳出屏幕。当用户滚动一点,视图就会跳回原来的位置,一切都很好。那么我能做些什么来防止这种跳跃呢 我认为传入的数据会触发类似layoutIfNeeded的事件,这会影响动画的位置。 另一个想法是,它与我的自动布局约束冲突 动画是这样完成的: - (IBAction)handlePan:(UIPanG

我的UIView动画有一个恼人的问题。基本上,我是通过跟踪手指的位置来制作UIView旋转动画。当视图完全加载时,一切都正常工作,但是当新的数据视图内容从我的web服务传入时,如果用户拖动手指,视图就会跳出屏幕。当用户滚动一点,视图就会跳回原来的位置,一切都很好。那么我能做些什么来防止这种跳跃呢

我认为传入的数据会触发类似layoutIfNeeded的事件,这会影响动画的位置。 另一个想法是,它与我的自动布局约束冲突

动画是这样完成的:

- (IBAction)handlePan:(UIPanGestureRecognizer *)gesture {

  UIView *currentView = self.viewToAnimate;

  CGPoint translation = [gesture translationInView:gesture.view.superview];
  CGFloat percent = translation.x / gesture.view.bounds.size.width;

  CATransform3D transform = CATransform3DIdentity;
  transform.m34 = 1.0 / -800;
  currentView.layer.transform =
      CATransform3DRotate(transform, M_PI * percent, 0.0, 1.0, 0.0);

      //Snap back if the users lifts his finger
  if (gesture.state == UIGestureRecognizerStateEnded ||
      gesture.state == UIGestureRecognizerStateCancelled ||
      gesture.state == UIGestureRecognizerStateFailed) {

    [UIView animateWithDuration:0.45
        delay:0.0
        options:UIViewAnimationOptionCurveEaseInOut
        animations:^{ currentView.transform = CGAffineTransformIdentity; }
        completion:nil];
  }
}

要直接解决这个问题,关于你正在做什么和如何做的信息太少了。这些视图是什么类型的,您是否以编程方式生成视图

最有可能发生的是两种情况之一

首先,视图本身正在调用self进行刷新,在这种情况下,它将设置其transformti标识。如果是这种情况,则只需将此视图添加到另一个超级视图,并将变换应用到该超级视图,而不是视图本身

第二种可能性是superview正在调用视图以重新定位。在这种情况下,您可能希望通过在其中一个视图上设置一些参数来中断此类操作,以便自动停止此操作,或者尝试分析此调用的来源


要分析调用此视图进行重新定位的原因,我建议您对视图进行子类化,如果需要,甚至对层进行子类化,并覆盖setFrame、setTransform等方法,并在其中添加断点。

我成功地使其与[self.views To animate setTranslates自动调整大小gmaskintoConstraints:YES]


我认为我的约束在加载过程中重新定位了视图,因为视图正在增长。在IB中降低约束优先级并将TranslatesAutoResizengMaskintoConstraints设置为“是”后,一切正常。

您可以尝试停止视图上的动画,以防它们是罪魁祸首。您可以使用[currentView.layer removeAllAnimations]完成此操作。感谢您的回复。我设法使它与[self.views to animate settranslates自动调整大小gmaskinto constraints:YES];一起工作;。我认为我的约束在加载过程中重新定位了视图,因为视图正在增长。在降低IB中的约束优先级并将translatesAutoresizingMaskIntoConstraints设置为YES后,一切都按预期工作。