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 に答える