是否有可能用流行音乐为NSWindows制作动画片?

时间:2014-08-13 03:21:48

标签: objective-c animation nswindow facebook-pop

我想在我的应用程序NSWindow上使用一些漂亮的流行动画。我已经知道如何为所有不同类型的CALayerBacked实体制作动画,但我无法确定是否有办法为NSWindow的框架设置动画更改动画。

我遇到的问题是,我可以为NSWindow的contentView设置动画(因为它是CALayerBacked),但不是NSWindow的位置和大小本身。

我知道,我可以简单地调用setFrame:display:animate:,但这并不像pop框架那样提供相同的平滑动画。

使用OSX时,

kPOPViewFrame 不可用。我改为使用 kPOPLayerBounds

enter image description here

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

您可以在任何您喜欢的对象上创建自己的自定义属性:

+ (id)propertyWithName:(NSString *)aName initializer:(void (^)(POPMutableAnimatableProperty *prop))aBlock

你会为NSWindow设置一个这样的东西......

POPAnimatableProperty *windowPositionProperty = [POPAnimatableProperty propertyWithName:@"com.myname.NSWindow.position" initializer:^(POPMutableAnimatableProperty *prop) {
    prop.readBlock = ^(NSWindow *window, CGFloat values[]) {
        values[0] = window.frame.origin.x;
        values[1] = window.frame.origin.y;
    };

    prop.writeBlock = ^(NSWindow *window, const CGFloat values[]) {
        [window setFrameOrigin:CGPointMake(values[0], values[1])];
    };
}];

请注意文档注释“自定义属性应使用反向DNS命名。”

然后像这样设置动画:

POPSpringAnimation *endBounce = [POPSpringAnimation animation];
endBounce.property = windowPositionProperty;
endBounce.toValue = [NSValue valueWithCGPoint:targetPosition];
[window pop_addAnimation:endBounce forKey:@"endBounce"];