C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – CABasicAnimation和自定义类型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我对CoreAnimation不太熟悉,所以我希望我错过了一些非常简单的东西.我想以简单的方式为NSView的自定义属性(NSGradient)设置动画,使用[[view animator] setGradient:gradient] ;.我定义了(id)defaultAnimationForKey:(NSString *)键并返回了一个简单的CABasicAnimation,但是没有执行动画.由于这适用于更简单的类型和NSColor,我猜CABasicAnimation不适用于渐变.很好,但在这种特殊情况下,渐变是微不足道的(总是两个停止),因此我可以轻松编写插值函数.问题:如何定义自定义插值?关于视图,图层和动画,子类化动画类等的代表,我用Google搜索,但我无法弄清楚这些事情.谢谢!

解决方法

当我学习如何使用核心动画时,我以为我记得通过了一些Apple文档,这些动画展示了如何设置无法由定义动画提供的属性描述来处理的动画.一路走来,我偶然发现了Apple的一些示例代码,描述如下:

这可能是您已经以另一种方式处理的特定任务的答案.我在Xcode中的Documentation and API Reference中找到了它,示例代码名称只是Gradients. (请注意,有一个原始版本1.0和更新版本1.1,今年4月重做,因此应该更容易使用当前工具.

但是,创建无法通过Core Animation本身自动化的自定义动画的更大问题是遵循Apple的Cocoa动画编程指南中的示例,在使用NSAnimation对象一节中.它在Subclassing NSAnimation主题下描述,推荐的方法显示在Smooth Animations标题下.您重写setCurrentProgress:方法,以便每次调用它时首先调用Super,以便NSAnimation更新进度值,即您的自定义动画属性,然后执行动画的下一帧所需的任何更新或绘图.以下是Apple在参考文档中提供的注释和示例代码

Listing 4  Overriding the setCurrentProgress: method
- (void)setCurrentProgress:(NSAnimationProgress)progress
{
    // Call super to update the progress value.
    [super setCurrentProgress:progress];

    // Update the window position.
    NSRect theWinFrame = [[NSApp mainWindow] frame];
    NSRect theScreenFrame = [[NSScreen mainScreen] visibleFrame];
    theWinFrame.origin.x = progress *
        (theScreenFrame.size.width - theWinFrame.size.width);
    [[NSApp mainWindow] setFrame:theWinFrame display:YES animate:YES];
}

因此,基本上您定义了一个“进度值”(可能由多个值组成),它定义了自定义动画的状态,并编写了给定当前“进度值”的代码,用于绘制或更改动画处于该特定状态时绘制的内容.然后让NSAnimation使用设置动画的常规方法运行动画,它将执行代码以在适当的时间绘制动画的每个帧.

我希望能回答你想知道的事情.我怀疑我之前没有看过它就能轻松找到这个,因为我最终不得不去我认为可能的地方,并逐页浏览整个主题再次找到它!

大佬总结

以上是大佬教程为你收集整理的objective-c – CABasicAnimation和自定义类型全部内容,希望文章能够帮你解决objective-c – CABasicAnimation和自定义类型所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: