使用核心动画进行缩放

4

我有一个NSScrollView,想把它缩小50%。我使用以下代码实现:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

animation.fromValue = [NSNumber numberWithFloat:1.00];
animation.toValue = [NSNumber numberWithFloat:0.50];
[animation setDuration:0.20f];

[animation setFillMode:kCAFillModeForwards];
[animation setRemovedOnCompletion:NO];

[self.scrollView.layer addAnimation:animation forKey:@"drag"];

这可以实现,但当我在缩小的视图范围之外单击时,滚动视图的文档视图会接收鼠标按下事件。因此,尽管滚动视图及其内容在视觉上看起来被缩小了,但它们在技术上并没有被缩小。

我该怎么做呢?

谢谢!

1个回答

2

图层动画与您所描述的完全相同(动画只改变外观,而不是基础几何形状)。

尝试使用UIView块动画并更改滚动视图的变换,而不是图层的变换。

编辑:

哦。抱歉,我以为这是iOS。我想我应该注意到你说的是NSView,而不是UIView。我现在大部分工作都在iOS上进行,我的OSX经验大多是在Core Animation出现之前的时期。

我认为答案是获得视图的动画代理并在其中设置更改,但我在Mac OS中只做了一些学习练习,所以我需要查找具体的细节。


谢谢 Duncan。忘了提到它是一个OS X应用程序。但我想同样适用吧? - Sebastian
请注意:将“additive”属性设置为“YES”时,在使用CoreAnimation进行动画处理时,几何图形(模型层)也会发生变化。 - Adam Waite
@adamWaite,设置添加属性会改变模型层,但不会改变视图的属性吗? - Duncan C
说实话,我不是很确定。我对CoreAnimation还比较陌生,也没有太多使用经验。但我认为你说得对。今天早些时候,我尝试使用缩放变换来动画化,虽然屏幕上呈现了像素,但它们无法响应触摸操作,这表明CGRectZero出了问题。最终我选择修改视图来达成目的 :/。 - Adam Waite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接