Iphone 如何";flick";一个美丽的风景?

Iphone 如何";flick";一个美丽的风景?,iphone,cocoa-touch,core-animation,quartz-graphics,Iphone,Cocoa Touch,Core Animation,Quartz Graphics,我有一些UIView,我希望用户能够在屏幕上“轻弹”。它们不是滚动视图。它们只包含一个光栅图像(png)。有人能给我指一些示例代码等来帮助我开始吗?比“MoveMe”更重一点的东西,有助于检测“flick”(相对于“轻推”或拖放),然后将视图带向“flick”的方向 OpenGL可能有点过头了。如果可能的话,我想留在核心图形/动画领域 假设您有一个名为aView的UIView和两个uiimageview,page1和page2。假设您在aView中已将page1作为子视图,则此代码将从page1

我有一些UIView,我希望用户能够在屏幕上“轻弹”。它们不是滚动视图。它们只包含一个光栅图像(png)。有人能给我指一些示例代码等来帮助我开始吗?比“MoveMe”更重一点的东西,有助于检测“flick”(相对于“轻推”或拖放),然后将视图带向“flick”的方向


OpenGL可能有点过头了。如果可能的话,我想留在核心图形/动画领域

假设您有一个名为
aView
UIView
和两个
uiimageview
page1
page2
。假设您在
aView
中已将
page1
作为子视图,则此代码将从
page1
切换到
page2

[UIView beginAnimations:@"someId" context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:aView cahe:YES];
[page1 removeFromSuperview];
[aView addSubview:page2];
[UIView commitAnimations];

要检测触摸,在视图控制器中,可以使用touchesBegind和toucheSend方法,存储touchesBegind中的触摸,如果触摸向左或向右移动超过一定量,则为轻弹,不是向左或向右推动。

我想说,实现这一点最简单的方法是将视图放在启用分页的UIScrollView容器中,让它担心所有的“flicking”操作。这对我很有用


您甚至可以通过一些额外的努力让视图延迟加载图像。

我想您可以通过获取答案并检查两个事件之间的时间来轻松实现这一点。短时间和长距离的结合可以解释为flick。您还可以通过计算两个触摸事件点的坐标来确定轻弹的方向。

我在这里找到了一条线索,尽管这种方法让我担心-


它不考虑速度或时间戳;只是上次事件更新后的距离。如果Apple更改了事件更新的频率/粒度,则此代码可能会中断。

尝试使用
UIPANGentureRecognitizer
示例代码:

UIPanGestureRecognizer *imageGesture = [[UIPanGestureRecognizer alloc]
                                         initWithTarget:self
                                         action:@selector(imageDragged:)];
[imageView1 addGestureRecognizer:imageGesture];
然后


我不是在“页面”之间转换。更像是试图把图像从屏幕的一边扔到另一边。是的,但这不一定能区分拖动和轻弹。也许我应该说得更具体些。有人“捡起”和“扔下”它需要与有人“弹”(扔)它不同的处理方式。“捡起”和“扔下”它和弹东西有什么区别?想象一下你桌上有一枚硬币。你可以把它捡起来放在碗里,也可以把它“弹”到桌子的另一部分。你用轻弹加速它,然后“重力”和“摩擦力”使它静止……但我不想要任何滚动效果。我希望对象保持在屏幕的边界内。我只想要一个快速的轻弹手势,将它们从屏幕的一侧发送到另一侧。因此,轻弹会使它们运动起来,然后“重力”和“摩擦”会使它们减速……这是我的情况下的完美解决方案,因为我只需要向左或向右移动轻弹即可消除效果。
- (void)imageDragged:(UIPanGestureRecognizer *)gesture{
UIImageView *imageView = (UIImageView *)gesture.view;
CGPoint translation = [gesture translationInView:imageView];

imageView.center = CGPointMake(imageView.center.x + translation.x,
                               imageView.center.y + translation.y);
imageView2.center = imageView.center;
imageView3.center = imageView.center;

[gesture setTranslation:CGPointZero inView:imageView];}