UISnapBehaviour только по оси X
Есть ли способ заставить UISnapBevahiour работать только вдоль линейной оси X?
Я хочу точное поведение UISnapBehaviour, но не хочу, чтобы он "встряхивал" положение на оси x и y, а только на оси x.
Это для UIView внутри моего contentView ячейки таблицы.
// 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];
2 ответа
Я опубликую код, который я использовал для подобных действий, как я уже упоминал в своем комментарии, он использовал анимацию 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];
}];
Это представляет модальное представление, которое возникает и колеблется при представлении.
Из документации 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.