2

有没有办法让 UISnapBevahiour 只能沿着线性 x 轴工作?

我想要 UISnapBehaviour 的确切行为,但不希望它在 x 和 y 轴上“摇晃”到位,只是在 x 轴上。

这是用于表格单元格的 contentView 内的 UIView。

// UIKitDynamics
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self];
CGPoint centerPoint = self.contentView.center;
self.snapBehaviour = [[UISnapBehavior alloc] initWithItem:self.frontView snapToPoint:centerPoint];
[self.snapBehaviour setDamping:1.0f];
[self.animator addBehavior:self.snapBehaviour];
UIDynamicItemBehavior *itemBehaviour = [[UIDynamicItemBehavior alloc] initWithItems:@[self.frontView]];
itemBehaviour.elasticity = 0.0f;
itemBehaviour.allowsRotation = NO;
[self.animator addBehavior:itemBehaviour];
4

2 回答 2

4

从它的块的UIDynamicBehavior 文档中:action

@property(nonatomic, copy) void (^action)(void)

动态动画师在每个动画步骤上调用动作块。

因此,在创建您的行为时,请执行以下操作:

UIView *view = ...
UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:view attachedToAnchor:point];
    
CGFloat xCoordinate = view.frame.origin.x;
attachment.action = ^{
   if (view.frame.origin.x != xCoordinate) {
        CGRect frame = view.frame;
        frame.origin.x = xCoordinate;
        view.frame = frame;
    }
};

[self.dynamicAnimator addBehavior:attachment];

在我的示例中,我使用了 UIAttachmentBehavior,但此方法也适用于 UIDynamicBehavior 的任何其他子类,在您的情况下为 UISnapBehavior。

于 2015-01-21T16:01:31.423 回答
0

我将发布我用来做类似事情的代码,正如我在评论中提到的那样,它使用了 UIView 动画,该动画利用了下面的 UIKit Dynamics,而不是直接使用它们......

[UIView animateWithDuration:0.5
                      delay:0.0
     usingSpringWithDamping:0.5
      initialSpringVelocity:0.3
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                   [toView setFrame:_modalFrame];
                 }
                 completion:^(BOOL finished) {
                   [self.context completeTransition:YES];
                 }];

这呈现了模态视图,该视图在演示中出现并略有波动。

于 2014-03-18T09:46:18.023 回答