Macos 核心动画代码结构/约定
在学习核心动画的过程中,我很快就了解到,如果你做得不对,你会有非常奇怪的未定义行为。为此,我有几个问题可以帮助我在概念上更好地理解它Macos 核心动画代码结构/约定,macos,cocoa,core-animation,Macos,Cocoa,Core Animation,在学习核心动画的过程中,我很快就了解到,如果你做得不对,你会有非常奇怪的未定义行为。为此,我有几个问题可以帮助我在概念上更好地理解它 我的NSView子类在其init中声明了以下内容。此视图是普通图层备份视图的子视图 [self setLayer:[CALayer layer]]; [self setWantsLayer:NO]; 在此之后,我应该在什么时候和什么情况下引用self而不是[self layer]?我只使用显式和隐式动画操作层,远离[self setFrame:]等,使用[[s
- 我的NSView子类在其init中声明了以下内容。此视图是普通图层备份视图的子视图
在此之后,我应该在什么时候和什么情况下引用self而不是[self layer]?我只使用显式和隐式动画操作层,远离[self setFrame:]等,使用[[self layer]setPosition]等[self setLayer:[CALayer layer]]; [self setWantsLayer:NO];
- 这种方法的问题是,在应用的任何和所有动画中,视图的实际帧都停留在一个点上。如果我的视图应该接收鼠标事件呢?例如,我有一个使用核心动画的视图,它被鼠标拖动。是否有一种方法可以使视图框架与表示层的当前状态保持同步,以便接收正确的鼠标事件
- 关于表示层,显然它仅在实际动画正在进行时才可用。是否有任何类型的层属性可以告诉我它在视觉上的实际位置,即使动画没有进行中
[自我设置WantLayer:是]
。另外,如果您想提供一个特定的CALayer子类(例如CAScrollLayer),只需在-SetWantLayer:
之前调用-setLayer:
;如果您只需要一个普通的CALayer,只需调用-setWantLayer:
,它就会为您创建。更好的是,只需在Interface Builder中选中“想要图层”选项
其次,使用层备份视图的全部意义在于,您可以继续使用常规的NSView方法,并获得免费的CoreAnimation“tweening”效果。如果您想使用CoreAnimation作为移动项目的唯一方法,那么正确的方法是创建一个包含纯CALayer表示层次结构的层背景视图
我没有看过任何免费提供的CoreAnimation教程,但我绝对可以推荐实用程序员。这本书的作者也提供了它们。我想你需要重新表述一下你的问题。似乎有一些潜在的误解,但你并没有很清楚地表达出来。你们的问题标题表明你们想了解一些更理论的东西,但你们的实际问题表明你们想了解一些更具体的东西。让我看看能否澄清几件事
- presentationLayer在“飞行中”时提供有关层当前状态的信息
- 当没有动画出现时,presentationLayer和层信息将相同。查询图层的边界、边框或位置,以了解其当前在其父坐标空间中的位置
- NSView必须启用图层备份才能执行动画
- 确保不只是使用显式动画设置动画,也不实际设置正在设置动画的层值。动画不会自动更改正在设置动画的层的属性。您必须自己将属性更改为结束值,否则它只会“快速恢复”到起始值
- 如果要为视图设置动画,而不是层,可以使用animator代理,如
[[view animator]setFrame:newFrame]代码>
- 在CATRAAction中对动画师的换行调用,以更改动画持续时间之类的内容