如何在iPhoto 09中执行翻转和增长动画?

时间:2010-05-16 20:11:27

标签: objective-c cocoa core-animation iphoto

我正在开发一个Cocoa应用程序,并希望能够在我的NSCollectionView中的某个视图中单击一个按钮,并将详细信息视图翻转打开并定位到屏幕中间,就像在iPhoto 09中一样单击照片右下角的“i”。照片“翻转”并以窗户为中心生长,以显示照片的细节。

我猜他们正在使用Core Animation来实现这一目标。我一直在看Lemur Flip示例,但是当我尝试修改它以向动画添加重新定位代码时,它会抛弃翻转。

这是我添加到 - (IBAction)翻转的定位代码:( id)发送者; LemurFlip的代码:

...
[CATransaction begin]; {
NSSize supersize = contentView.frame.size; // Size of window content view
NSSize subsize = frontView.frame.size; // Size of view we're flipping out
if(!frontView.isHidden)
{
    // Move views to middle of the window
    [[backView animator] setFrameOrigin:NSMakePoint((supersize.width / 2) - (subsize.width / 2), (supersize.height / 2) - (subsize.height / 2))];
    [[frontView animator] setFrameOrigin:NSMakePoint((supersize.width / 2) - (subsize.width / 2), (supersize.height / 2) - (subsize.height / 2))];
}
else {
    // Return views to point of origin
    [[backView animator] setFrameOrigin:NSMakePoint(0, 0)];
    [[frontView animator] setFrameOrigin:NSMakePoint(0, 0)];
}
    [hiddenLayer addAnimation:[self _flipAnimationWithDuration:flipDuration isFront:NO] forKey:@"flipGroup"];
    [visibleLayer addAnimation:[self _flipAnimationWithDuration:flipDuration isFront:YES] forKey:@"flipGroup"];
} [CATransaction commit];
...

是否有一个很好的例子说明如何执行此操作或组合这些动画的一些规则?

1 个答案:

答案 0 :(得分:1)

而不是

[[backView animator] setFrameOrigin:];
[[frontView animator] setFrameOrigin:];

你想要

[hiddenLayer setPosition:];
[visibleLayer setPosition:];

您可能需要调整动画值,可能是使用CABasicAnimation