2014-01-30 1 views
3

Я только начинаю использовать набор UIDynamic и следую примерам в Интернете. Я достиг такого поведения, которое я хочу, чтобы получить мгновенную силу в направлении и вернуться к исходному месту.UIDynamicKit с приложением и толчковым режимом вызывает длительное время колебания

Я достиг этого, используя этот код

CGPoint origCenter = self.viewContentContainer.center; 

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 
UIPushBehavior *push = [[UIPushBehavior alloc] 
         initWithItems:@[self.viewContentContainer] mode:UIPushBehaviorModeInstantaneous]; 

CGVector vector = CGVectorMake(200.0, 0.0); 
push.pushDirection = vector; 


CGPoint anchorpoint = origCenter; 
UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:self.viewContentContainer attachedToAnchor:anchorpoint]; 
[attachment setFrequency:2.0]; 
[attachment setDamping:0.5]; 


[self.animator addBehavior:push]; 
[self.animator addBehavior:attachment]; 

Тем не менее, она колеблется в течение очень долгого времени в конце над 1 или 2 пикселя. Изменение значений частоты и демпфирования, похоже, не делает это лучше или хуже.

Неужели кто-нибудь еще испытал это?

Большое спасибо.

ответ

2

Добавьте это, и он должен это исправить:

attachment.length = 1.0f; 

Это ожидаемое поведение, хотя это кажется «неприглядный». Вышеуказанное просто компенсирует это «неприглядность».

Протестировано. Надеюсь, поможет.

+0

У меня есть эта проблема, и длина 1,0, кажется, задерживает колебания сначала, но не навсегда. В конце концов, после достаточного количества движений, точки зрения будут колебаться все еще. – snakeoil

0

У меня такая же проблема. не решить еще, но у меня есть некоторые идеи я удалить поведение привязанности, когда UIGestureRecognizer закончилась, но когда я перетащить его по-прежнему колеблется :(

-(void) handlePanGestureRecognizer:(UIPanGestureRecognizer*) gr 
{ 
CGPoint att = [gr locationInView:self.view]; 
self.attachView.center = att; 

if (gr.state == UIGestureRecognizerStateBegan) 
{ 
    _attachment.anchorPoint = att; 
    [_animator addBehavior:_attachment]; 
    if (_snap) 
     [_animator removeBehavior:_snap]; 
} 

if (gr.state == UIGestureRecognizerStateChanged) 
{ 
    _attachment.anchorPoint = att; 
} 

if (gr.state == UIGestureRecognizerStateEnded) 
{ 
    _snap = [[UISnapBehavior alloc] initWithItem:self.button snapToPoint:att]; 
    [_animator addBehavior:_snap]; 
    [_animator removeBehavior:_attachment]; 
} 
} 

и это не очень подходит, но он работает, как я люблю

-(void) handlePanGestureRecognizer:(UIPanGestureRecognizer*) gr 
{ 
CGPoint att = [gr locationInView:self.view]; 
self.attachView.center = att; 

    if (_snap) 
     [_animator removeBehavior:_snap]; 

    _snap = [[UISnapBehavior alloc] initWithItem:self.button snapToPoint:att]; 
    [_animator addBehavior:_snap]; 
} 
0

пути я вокруг этих колебаний были удаление поведения полностью, используя animator.removeBehavior(), а затем заново добавить такое же поведение обратно аниматор

0

Добавить это поведение:.

dynamic = UIDynamicItemBehavior() 
    dynamic.resistance = 1 
    self.animator.addBehavior(dynamic) 
Смежные вопросы