能否使用pop来给NSWindows制作动画效果?

3
我想在我的应用程序的NSWindow上使用一些漂亮的弹出动画。我已经知道如何对不同类型的CALayerBacked实体进行动画处理,但我无法弄清楚是否有一种方法可以对我的NSWindow的框架进行更改动画处理。
我面临的问题是,我可以对NSWindow的contentView(因为它是CALayerBacked)进行动画处理,但无法对NSWindow本身的位置和大小进行处理。
我知道可以简单地调用setFrame:display:animate:,但这与pop框架提供的平滑动画不同。
在使用OSX时,kPOPViewFrame不可用。我必须使用kPOPLayerBounds

enter image description here

是否有一种方法可以实现这一点?
1个回答

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"];

这看起来是一个非常好的想法...如果它有效,我会尝试并接受你的答案。 - Git.Coach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接