【问题标题】:UIView animateWithDuration equivalent for OSX CocoaUIView animateWithDuration 等效于 OSX Cocoa
【发布时间】:2014-04-30 07:46:06
【问题描述】:

这相当于什么可可

[UIView animateWithDuration:2 animations:^{
    self.cell.someProperty = 12;
}];

我试过这个,但没有运气

 [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
        [context setDuration:2];
        [self.animator setSomeProperty:12.0];
    } completionHandler:^{

    }];

- (void)setSomeProperty:(CGFloat)property {
    [self.cell setSomeProperty:property];
    [self setNeedsDisplay];
}

我需要为属性设置动画的原因是因为我有一个 NSCell 子类,它根据该属性自行绘制。

【问题讨论】:

  • 看不到您发布的内容有任何问题。您可能需要显示更多代码吗?

标签: objective-c macos cocoa core-animation


【解决方案1】:

1)

Core Animation exists on MacOS,虽然您在 iOS 下没有像“animateWithDuration”这样定义好的东西,但您确实有 CAAnimationCABasicAnimation

2)

您还发现了"NSAnimationContext"(也许您发现了这个closely related question?那里的答案有一个非常漂亮的类别,您可以利用)。

3)

您的 setSomeProperty 实现可能只是有一些拼写错误。

【讨论】:

  • 感谢回复。我最终改用了 CALayers,它与他们一起工作。不过,您可能对错别字是正确的。
【解决方案2】:

Mac OS 不像 iOS 那样具有视图级动画。常见的动画框架是 Core Animation。 (CALayer 和 CAAnimation 对象)。

Mac OS 拥有的是符合 NSAnimatablePropertyContainer 协议的视图级类。该协议允许您为正在制作动画的对象请求动画代理对象(使用 NSAnimatablePropertyContainer 协议中的 animator 方法),然后您在代理中而不是在对象中设置属性值,系统会为您制作动画。您可能想购买 Marcus Zarra 或 Bill Dudney 的 Core Animation 书籍。这两本书对于最近的 iOS 动画添加都相当过时,但对 Mac OS 动画有相当全面的处理。

我只玩过 Mac OS 特定的动画,但没有在实际项目中使用过。 (我倾向于在Mac OS上使用较低级别的Core Animation代码,因为我对它很熟悉,并且在Mac上很常见。NSAnimatablePropertyContainer协议和动画代理方案是Mac OS独有的。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2023-03-13
    • 2017-04-25
    • 1970-01-01
    • 2015-07-16
    相关资源
    最近更新 更多