cocoa – 使用核心动画显式动画NSView

cocoa – 使用核心动画显式动画NSView,第1张

概述我正在尝试使用核心动画在NSView中滑动.我想我需要使用显式动画,而不是依赖[[animator] setFrame:newFrame]之类的东西.这主要是因为我需要设置动画委托才能在动画结束后采取行动. 我使用动画师工作得很好,但正如我所说,我需要在动画结束时收到通知.我的代码目前看起来像: // Animate the controlViewNSRect viewRect = [contr 我正在尝试使用核心动画在NSVIEw中滑动.我想我需要使用显式动画,而不是依赖[[animator] setFrame:newFrame]之类的东西.这主要是因为我需要设置动画委托才能在动画结束后采取行动.

我使用动画师工作得很好,但正如我所说,我需要在动画结束时收到通知.我的代码目前看起来像:

// Animate the controlVIEwNSRect vIEwRect = [controlVIEw frame];NSPoint startingPoint = vIEwRect.origin;NSPoint endingPoint = startingPoint;endingPoint.x += vIEwRect.size.wIDth;[[controlVIEw layer] setposition:NSPointTocgPoint(endingPoint)];CABasicAnimation *controlPosAnim = [CABasicAnimation animationWithKeyPath:@"position"];[controlPosAnim setFromValue:[NSValue valueWithPoint:startingPoint]];[controlPosAnim setTovalue:[NSValue valueWithPoint:endingPoint]];[controlPosAnim setDelegate:self];[[controlVIEw layer] addAnimation:controlPosAnim forKey:@"controlVIEwposition"];

这在视觉上有效(并且我在最后得到通知)但看起来实际的controlVIEw没有被移动.如果我使窗口刷新,controlVIEw将消失.我试过更换

[[controlVIEw layer] setposition:NSPointTocgPoint(endingPoint)];

[controlVIEw setFrame:newFrame];

这确实会导致视图(和图层)移动,但它会破坏某些东西,以至于我的应用程序很快就会因为seg故障而死亡.

显式动画的大多数示例似乎只是移动CALayer.必须有一种方法来移动NSVIEw并且还能够设置委托.任何帮助,将不胜感激.

解决方法 我认为你需要在结束时调用setposition(在设置动画之后).
此外,我认为你不应该明确地为视图层设置动画,而是通过使用动画设置动画来设置视图.您也可以使用动画师代表:)

// create controlPosAnim[controlVIEw setAnimations:[NSDictionary dictionaryWithObjectsAndKeys:controlPosAnim,@"frameOrigin",nil]];[[controlVIEw animator] setFrame:newFrame];
总结

以上是内存溢出为你收集整理的cocoa – 使用核心动画显式动画NSView全部内容,希望文章能够帮你解决cocoa – 使用核心动画显式动画NSView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1020592.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存