首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心动画代码结构/约定

核心动画代码结构/约定
EN

Stack Overflow用户
提问于 2009-05-16 23:18:10
回答 2查看 786关注 0票数 2

在学习核心动画的过程中,我很快地了解到,如果你做得不对,你就会得到非常奇怪的不确定的行为。为此,我有几个问题将有助于我在概念上更好地理解它。

  • 我的NSView子类在init中声明了以下内容。此视图是普通层支持视图的子视图。 [自定层:NO层];自定层:NO; 在此之后,在什么情况下,我应该指的是自我,而不是自我层?我只使用显式和隐式动画操作该层,远离self setFrame:等,并使用[self layer setPosition]等。
  • 这种方法的问题是,视图的实际框架在所有应用的动画中都停留在一个位置上。如果我的观点应该是接收鼠标事件呢?例如,我有一个使用核心动画的视图,它被鼠标拖动。有什么方法可以让视图帧与表示层的当前状态同步,这样我就可以接收到适当的鼠标事件了吗?
  • 关于表示层,显然只有在实际动画正在进行时才可用。有没有任何类型的属性,可以告诉我,它实际上是在视觉上,即使动画没有进展?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-19 21:56:45

我想你需要重新表达一下你的问题。似乎有一些潜在的误解,但你并没有很清楚地表达出来。你的问题标题意味着你想要理解一些更理论性的东西,但你的实际问题意味着你在寻找更具体的东西。让我看看能不能澄清几件事。

  • presentationLayer提供有关层在“飞行中”时的当前状态的信息。
  • 当没有动画发生时,presentationLayer和图层信息将是相同的。查询该层的边界、帧或位置,以找出它当前在其父坐标空间中的位置。
  • NSViews必须启用层支持才能执行动画。
  • 确保您不只是使用显式动画动画,而不是实际设置您正在动画的图层值。动画不会自动改变其动画层的属性。您必须自己将属性更改为结束值,否则它将“快速返回”到起始值。
  • 如果您想要动画视图,而不是图层,您可以使用动画代理,如[[view animator] setFrame:newFrame];
  • 在CATrasaction中包装对动画器的调用,以更改动画持续时间之类的内容。

如果你需要通过更新你的问题来澄清一下,请告诉我。提供一些相关的代码将真正帮助您确定您在解决问题时遇到的问题。

票数 1
EN

Stack Overflow用户

发布于 2009-05-17 03:00:13

首先,您想要使用[self setWantsLayer: YES]。另外,如果您想要提供特定的-setLayer:子类(如CAScrollLayer),那么只有在-setWantsLayer:之前调用CALayer才是重要的;如果您只想要一个常规的CALayer,只需调用-setWantsLayer:,它就会为您创建。更好的是,只需检查界面生成器中的“希望层”选项即可。

其次,使用图层支持视图的全部要点是,您可以继续使用常规的NSView方法,并获得免费的CoreAnimation“推特化”效果。如果您想使用CoreAnimation作为您移动项目的唯一方法,那么正确的方法是创建一个包含纯CALayer表示层次结构的层支持视图。

我没有看过任何免费提供的CoreAnimation教程,但我绝对可以推荐务实的程序员的关于这一主题的书。这本书的作者还提供了尖叫声

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/873515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档