你如何动画滚动和缩放原子?

时间:2011-07-08 14:57:50

标签: cocoa macos scroll core-animation nsscrollview

我的应用程序中有一个自定义视图,它是图层支持的,并嵌入在NSScrollView中。我允许用户放大(这是通过增加我的自定义视图的大小来实现的)。但是,我无法放大任意点,因为NSScrollView在我将其指向新滚动点之前不断阻碍并导致视图跳转(通常到视图的原点)。我真的想使用一个CAScrollLayer,因为我知道我肯定可以使用它进行缩放并使其顺利移动,但之后我失去了所有内置的滚动功能。

有没有办法在CAScrollLayer内利用NSScrollView,可能支持NSClipView?如果没有,CAScrollLayer实际上有什么用途呢?使用不同的方法,是否有可能以原子方式更改视图的大小和滚动点并使其具有动画效果?

简而言之,CAScrollLayer是完全无用的,还是大部分没用?

更新

我通过制作一个CALayer子类来显示我的视图内容,从而使我的内部视图跳得更少。我没有使用布局约束来调整大小,而是在覆盖-resizeWithOldSuperlayerSize:时调整大小。我仍然不能同时改变我的视图的帧大小和原点,并获得平滑的动画。要了解我正在寻找的内容,请在预览中打开图像并放大和缩小。它以平滑的方式放大图像的中心。

1 个答案:

答案 0 :(得分:0)

在限制中,您可以使用NSScroller代替;这样你就可以使用CAScrollLayer,如果这是你首选的实现。

请注意,在某些(较旧)版本的Mac OS X上,NSScroller有一个错误,导致它在其包含的视图上调用Apple私有方法。您会知道是否会发生这种情况,因为您会收到有关自定义视图未对“_”开头的方法做出响应的例外情况。