Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何以原子方式设置滚动和缩放动画?_Cocoa_Macos_Scroll_Core Animation_Nsscrollview - Fatal编程技术网

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
坐标的精度问题,我们自己进行滚动)。