我无法找到一种快速,简洁的方式来解释我想要完成的事情(这使得很难找到搜索谷歌的答案),所以我只想在这里详细说明。我想要完成的是将UIImageView
移动到iPhone屏幕的顶部边缘然后继续向上移动,但是一旦图像通过顶部边缘,它就会出现在屏幕的底部,因为它继续前进。
我一直在使用基本的[UIView commitAnimations]
命令来完成我的应用程序中对象的基本移动,所以如果可以使用它来完成(虽然它不必),这将是很好的。
答案 0 :(得分:1)
您不需要使用滚动视图或切换到cocos2d来实现简单的动画。您需要做的就是创建2个CALayer对象,然后将layer.contents分配给同一个图像。
CALayer *layer1 = [CALayer layer]
CALayer *layer2 = [CALayer layer]
UIImage *image = [UIImage imageNamed:@"whatever.png"];
layer1.contents = (id) image.CGImage;
layer2.contents = (id) image.CGImage;
然后使用普通动画更新两帧的位置,如this Apple QA doc所述。您只需确定窗口的高度,然后确保2个CALayers的起点和终点Y点始终为1个高度差。因此,当layer1动画到Y = -1时,这意味着layer2将处于Height-1。只有当两个图层都被部分曝光时,你才会看到两者,这就是你如何使这个效果起作用并且看起来只有1层。
答案 1 :(得分:0)
我认为你可以用UIScrollView做到这一点......这是我刚才在cyclic scroll views写的东西。
首先,我将内容大小设为窗口的高度,图像视图位于一个边缘。当图像滚动到可见区域时,下一页将进入视图,另一个图像看起来相同但不是。我认为这可以为您节省大量的帧计算,嵌套动画块和其他混淆。你当然可以用离散的视图来做,但我认为它可能会重新发明轮子。
答案 2 :(得分:0)
实现这一点的最佳方法是创建一个包含第一个和第二个精灵的CCNode子类,并在需要时交换它们。通过这种方式,您的所有逻辑都将非常简单。你将只使用一个CCNode(子类)而不考虑交换sprite - 它将由你的类自动完成
@interface MyNode : CCNode
{
CCSprite *sprite1;
CCSprite *sprite2;
CCSprite *currentSprite;
bool isChanging; //indicates that now two sprites are visible
}
@end