Cocoa 如何以原子方式设置滚动和缩放动画?
我的应用程序中有一个自定义视图,它是以层为基础的,并嵌入在Cocoa 如何以原子方式设置滚动和缩放动画?,cocoa,macos,scroll,core-animation,nsscrollview,Cocoa,Macos,Scroll,Core Animation,Nsscrollview,我的应用程序中有一个自定义视图,它是以层为基础的,并嵌入在NSScrollView中。我允许用户放大(这是通过增加自定义视图的大小来实现的)。但是,我无法放大任意点,因为在我将视图指向新的滚动点之前,NSScrollView会一直阻碍并导致视图跳转(通常是到视图的原点)。我真的很想使用一个CAScrollLayer,因为我知道我肯定可以用它正确地缩放,并使它平稳地移动,但这样我就失去了所有内置的滚动功能 是否有任何方法可以利用nscrollview中的CAScrollLayer,可能支持NSCl
NSScrollView
中。我允许用户放大(这是通过增加自定义视图的大小来实现的)。但是,我无法放大任意点,因为在我将视图指向新的滚动点之前,NSScrollView
会一直阻碍并导致视图跳转(通常是到视图的原点)。我真的很想使用一个CAScrollLayer
,因为我知道我肯定可以用它正确地缩放,并使它平稳地移动,但这样我就失去了所有内置的滚动功能
是否有任何方法可以利用nscrollview
中的CAScrollLayer
,可能支持NSClipView
?如果没有,那么CAScrollLayer
实际上有什么用途?是否可以使用不同的方法,以原子方式更改视图的大小和滚动点并设置动画
简而言之,CAScrollLayer
是完全无用,还是基本无用
更新
我通过创建
CALayer
子类来显示视图的内容,从而减少了内部视图的跳跃。我没有使用布局约束来调整大小,而是使用-resizeWithOldSuperlayerSize:
的覆盖来调整大小。但是,我仍然无法同时更改帧大小和视图的原点,并获得平滑的动画。要了解我在寻找什么,请在预览中打开图像并放大和缩小。它以平滑的方式围绕图像中心进行缩放。在限制范围内,您可以使用nscroller
;这样您就可以使用CAScrollLayer
,如果这是您的首选实现的话
请注意,在某些(较旧)版本的Mac OS X上,
NSScroller
有一个bug,导致它在其包含视图上调用Apple私有方法。如果发生这种情况,您就会知道,因为您的自定义视图会出现异常,不响应以“”开头的方法。nscroller
不提供任何UI chrome,对吗?你有没有任何例子说明它在哪里被用来达到类似的效果?操作系统版本不是问题,因为我将需要Lion(或者可能是Mountain Lion,取决于我何时发货)。NSScroller
是NSScrollView
使用的,是的,它“提供UI chrome”(如果你是说它负责绘制滚动条)。我们在iDefrag中使用它(块视图实际上是使用OpenGL绘制的,由于32位AppKit中float
坐标的精度问题,我们自己进行滚动)。