UIView animateWithDuration等效于OSX Cocoa

时间:2014-03-22 22:04:00

标签: objective-c macos cocoa core-animation

这个

的可可等价物是什么
[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子类,它在该属性上引入它自我依赖。

2 个答案:

答案 0 :(得分:1)

1)

Core Animation exists on MacOS虽然您没有定义为" animateWithDuration"在iOS下,您有CAAnimationCABasicAnimation

2)

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

3)

您可能只是在执行setSomeProperty时遇到了一些错误。

答案 1 :(得分:-1)

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

Mac OS具有符合NSAnimatablePropertyContainer协议的视图级别类。该协议允许您为要动画的对象请求动画代理对象(使用NSAnimatablePropertyContainer协议中的动画方法),然后在代理中而不是在对象中设置属性值,系统会为您设置动画。您可能想要购买Marcus Zarra或Bill Dudney的核心动画书籍。这两本书对于最近添加的动画iOS都已经过时了,但对Mac OS动画有着非常全面的处理。

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