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;