IOS拖动,轻弹或扔一个UIView

想知道如何去popup或扔掉一个UIView,如http://www.cardflick.co/或https://squareup.com/cardcase演示video。

我知道如何拖动物品,但是你怎么给他们重力/惯性。 这是由IOS处理?

您所描述的模拟重力/惯性之王的效果types可以通过缓出(快速开始,结束慢速)和缓入(开始缓慢,结束快速)定时function来产生。

在iOS中可以支持放松和caching,所以我不认为你需要任何外部库,也不需要努力(尽pipe你可以想象,你的影响将需要很多的微调)。

这将使一个对象的翻译animation效果达到一个给定的位置:

[UIView animateWithDuration:2.0 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^ { self.image.center = finalPosition; } completion:NULL]; } 

如果您通过UIPanGestureRecognizer处理您的手势,手势识别器将为您提供两个重要信息来计算最终位置: velocitytranslation ,它们分别表示对象移动的速度和移动速度。

你可以在你的视图中安装一个平移手势识别器(这将是你想要animation的对象,我猜)是这样的:

  UIPanGestureRecognizer* panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)]; [yourView addGestureRecognizer:panGestureRecognizer]; [panGestureRecognizer release]; 

然后在处理程序中处理animation:

  - (void)handlePanFrom:(UIPanGestureRecognizer*)recognizer { CGPoint translation = [recognizer translationInView:recognizer.view]; CGPoint velocity = [recognizer velocityInView:recognizer.view]; if (recognizer.state == UIGestureRecognizerStateBegan) { } else if (recognizer.state == UIGestureRecognizerStateChanged) { <track the movement> } else if (recognizer.state == UIGestureRecognizerStateEnded) { <animate to final position> } } 

iOS没有任何内置的重力/惯性API。 你最好的select是:

  1. 使用animation模拟效果:如果您正在向目标轻弹一个对象(不需要反弹),则只需将其发送到目标并调整animation时序曲线即可获得相当好的结果。

  2. 使用物理库。 花栗鼠是一个高品质的,有很多的iOS支持。 你设置对象,赋予它们权重,描述它们的形状,然后库代码会给你更新的(x,y)坐标,这样你就可以在屏幕上更新对象。

iOS中没有任何内容可以帮助您,但您可以轻松地自行实施。 我首先创build一个手势识别器,识别你想要使用的“轻弹”手势,可能是寻找恒定方向和增加速度的东西。 当你意识到这样一个动作时,你只需要适当地animation受影响的视图的位置。