【问题标题】:UIPangesture <--> UIView animation glitchUIPangesture <--> UIView 动画故障
【发布时间】:2014-05-09 12:40:38
【问题描述】:

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

我认为传入的数据会触发layoutIfNeeded 之类的东西,这会影响动画位置。 另一个想法是它与我的 autoLayout 约束冲突。

动画是这样完成的:

- (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];
  }
}

【问题讨论】:

  • 您可以尝试停止视图上的动画,以防它们是罪魁祸首。你可以用[currentView.layer removeAllAnimations]来做到这一点。

标签: ios objective-c animation uiview autolayout


【解决方案1】:

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

发生的情况很可能是两种情况之一。

首先,视图本身调用自身进行刷新,在这种情况下,它会设置其转换身份。如果是这种情况,您需要做的就是将此视图添加到另一个超级视图并将转换应用于该超级视图而不是视图本身。

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

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

【讨论】:

  • 感谢您的回复。我设法让它与[self.viewToAnimate setTranslatesAutoresizingMaskIntoConstraints:YES]; 一起工作。我认为我的约束在加载过程中重新定位了视图,因为视图正在增长。在 IB 中降低约束优先级并将 translatesAutoresizingMaskIntoConstraints 设置为 YES 后,一切都按预期工作。
【解决方案2】:

我设法让它与 [self.viewToAnimate setTranslatesAutoresizingMaskIntoConstraints:YES]; 一起工作。

我认为我的约束在加载过程中重新定位了视图,因为视图正在增长。在 IB 中降低约束优先级并将translatesAutoresizingMaskIntoConstraints 设置为YES 后,一切都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2014-11-24
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2021-01-24
    相关资源
    最近更新 更多