【问题标题】:Make Image Wrap Around Screen Edge? - iPhone Obj-C使图像环绕屏幕边缘? - iPhone Obj-C
【发布时间】:2013-07-01 01:08:08
【问题描述】:

我想不出一种快速、简洁的方式来解释我想要完成的工作(这使得在 Google 中很难找到答案),所以我将在这里尝试详细说明。我想要完成的是将UIImageView 移动到 iPhone 屏幕的顶部边缘,然后继续向上移动,但是一旦图像通过顶部边缘,它就会出现在屏幕底部,因为它继续移动通过。

我一直在使用基本的[UIView commitAnimations] 命令在我的应用程序中进行对象的基本移动,所以如果可以使用它来完成,那就太好了(尽管它不是必须的)。

【问题讨论】:

  • 核心动画不是为这些东西而构建的。你可以用两个图像视图来伪造它。
  • 我已经做到了(水平,但理论相同),这有趣。仔细研究解决这个问题的其他方法。
  • @CodaFi 你知道是什么为此构建的吗?我正在尝试将其应用于许多不同的 UIImageViews,所以我担心为每个图像使用两个图像会使事情复杂化
  • @Kevin 我目前没有任何实现效果的方法,这是我非常想在这个应用程序中拥有的东西
  • 也许这对你有帮助。 github.com/nicklockwood/SwipeView

标签: iphone objective-c uiimageview uianimation


【解决方案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 个 CALayer 的起点和终点 Y 点始终为 1 个高度差。因此,当 layer1 动画到 Y = -1 时,这意味着 layer2 将在 Height-1。只有当两层都部分暴露时,你才能看到两者,这就是你如何让这种效果起作用并且似乎只有一层。

【讨论】:

    【解决方案2】:

    我认为您可以使用 UIScrollView 来做到这一点...这是我不久前在 cyclic scroll views 上写的内容。

    我首先将内容大小设置为窗口的高度,图像视图位于一侧。当图像从可见区域滚出时,下一页将进入另一个图像,看起来相同但实际上不同。我认为这可以为您节省大量帧计算、嵌套动画块和其他混乱。您当然可以使用离散视图来做到这一点,但我认为这可能是在重新发明轮子。

    【讨论】:

      【解决方案3】:

      实现这一点的最佳方法是创建一个 CCNode 子类,该子类将包含第一个和第二个精灵,并在需要时交换它们。这样,您的所有逻辑都将非常简单。您将只使用一个 CCNode(子类)并且不会考虑交换精灵 - 这将由您的类自动完成

      @interface MyNode : CCNode
      {
      CCSprite *sprite1;
      CCSprite *sprite2;
      CCSprite *currentSprite;
      bool isChanging; //indicates that now two sprites are visible
      }
      @end
      

      【讨论】:

      • 以前从未使用过精灵,我会更多地研究它,看看我是否可以让它为此工作
      • 对不起,我只是经常看到游戏中的行为,我想在你的编程中真的不需要任何“游戏相关”,只是诱使用户认为他们看到的是一个对象,但实际上是在创建你自己的方式正如大多数用户所说的那样复制,我想一旦复制完全在屏幕上,然后将原始图像放在那里并删除复制/镜像对象
      猜你喜欢
      • 2017-01-26
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多