3

Right now, I have a UIPushBehavior that I use on a view to push it off screen depending on where the user touched with a UIPanGestureRecognizer. It works, but my problem is the view rotates an absurd amount... like it's attached to the tire of a sports car.

This is how I attach the UIPushBehavior:

else if (panGestureRecognizer.state == UIGestureRecognizerStateEnded) {
    [self.animator removeBehavior:self.panAttachmentBehavior];

    self.pushBehavior = [[UIPushBehavior alloc] initWithItems:@[self.imageView] mode:UIPushBehaviorModeInstantaneous];
    [self.pushBehavior setTargetOffsetFromCenter:centerOffset forItem:self.imageView];
    self.pushBehavior.active = YES;

    CGPoint velocity = [panGestureRecognizer velocityInView:self.view];
    CGFloat area = CGRectGetWidth(self.imageView.bounds) * CGRectGetHeight(self.imageView.bounds);
    CGFloat UIKitNewtonScaling = 1000000.0;
    CGFloat scaling = area / UIKitNewtonScaling;
    CGVector pushDirection = CGVectorMake(velocity.x * scaling, velocity.y * scaling);

    self.pushBehavior.pushDirection = pushDirection;

    [self.animator addBehavior:self.pushBehavior];
}

I don't know exactly what I should be changing to manipulate it more. Velocity and everything are perfect, I just don't want it to rotate as absurdly.

Doug Smith
  • 29,668
  • 57
  • 204
  • 388

1 Answers1

2

Maybe it's too late, but if you want to eliminate rotation altogether, do this:

UIDynamicItemBehavior* dynamic = [[UIDynamicItemBehavior alloc] initWithItems:@[self.imageView]];
dynamic.allowsRotation = NO;
[self.animator addBehavior:dynamic];

and the [self.animator addBehavior:self.pushBehavior];

Arian Sharifian
  • 1,295
  • 11
  • 14