UIDynamicAnimator/UIAttachmentBehavior jiggle?

При работе с новым физическим движком в iOS7 с использованием Xcode 5.1.1 я написал следующий код:

#import "ZViewController.h"

@interface ZViewController ()
@property (nonatomic, strong) UIView *cardView;
@property (nonatomic, strong) UIDynamicAnimator *animator;
@property (nonatomic, strong) UIAttachmentBehavior *attachment;
@end

@implementation ZViewController

- (void)viewDidLoad{
    [super viewDidLoad];

    self.cardView = [[UIView alloc]initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
    self.cardView.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:self.cardView];

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGestureHandler:)];
    [self.cardView addGestureRecognizer:panGestureRecognizer];

    self.animator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    self.cardView.center = self.view.center;
}

- (void)panGestureHandler:(UIPanGestureRecognizer *)panGesture{
    CGPoint touchPoint = [panGesture locationInView:self.view];
    switch(panGesture.state){
        case UIGestureRecognizerStateBegan:
            self.attachment = [[UIAttachmentBehavior alloc]initWithItem:self.cardView attachedToAnchor:touchPoint];
            [self.animator addBehavior:self.attachment];
            break;
        case UIGestureRecognizerStateChanged:
            touchPoint.x = 160.0;
            self.attachment.anchorPoint = touchPoint;
            break;
        case UIGestureRecognizerStateEnded:
            [self.animator removeBehavior:self.attachment];
            self.attachment = nil;
            break;
        default:
            break;
    }
}

@end

Когда я тестировал этот код, я обнаружил очень странное покачивание / покачивание. Перетаскивание cardView вверх и вниз, по большей части, делает то, что ожидается, т.е. cardView скользит вверх и вниз по центру оси x, но время от времени cardView перемещается по диагонали влево и обратно по диагонали к центру оси x. Кажется, что это покачивание не происходит последовательно, но, кажется, оно всегда покачивается влево.

Кто-нибудь видел это раньше? Есть идеи, что вызывает это? Как это остановить?

Заранее спасибо - АЯЛ

1 ответ

Решение

Я попробовал ваш код и мог повторить проблему. После того, как я установил длину, это остановило проблему.

Попробуйте установить длину вложения в 1

case UIGestureRecognizerStateBegan:
     self.attachment = [[UIAttachmentBehavior alloc]initWithItem:self.cardView attachedToAnchor:touchPoint];
     self.attachment.length = 1;
     [self.animator addBehavior:self.attachment];
     break;
Другие вопросы по тегам