に表示されている画像を切り替えたいのですNSImageView
が、その変化をアニメーション化したいです。これを行うためにさまざまな方法を試しました。うまくいけば、あなたの1人が実際に機能する可能性のあるものを提案できます. Cocoa for Mac を使用しています。
4340 次
2 に答える
7
私の知る限り、NSImageView
画像の変化のアニメーションはサポートされていません。ただし、NSImageView
最初のものの上に 2 番目のものを配置して、古いものを非表示にして新しいものを表示するようにアニメーション化することができます。例えば:
NSImageView *newImageView = [[NSImageView alloc] initWithFrame: [imageView frame]];
[newImageView setImageFrameStyle: [imageView imageFrameStyle]];
// anything else you need to copy properties from the old image view
// ...or unarchive it from a nib
[newImageView setImage: [NSImage imageNamed: @"NSAdvanced"]];
[[imageView superview] addSubview: newImageView
positioned: NSWindowAbove relativeTo: imageView];
[newImageView release];
NSDictionary *fadeIn = [NSDictionary dictionaryWithObjectsAndKeys:
newImageView, NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect, NSViewAnimationEffectKey,
nil];
NSDictionary *fadeOut = [NSDictionary dictionaryWithObjectsAndKeys:
imageView, NSViewAnimationTargetKey,
NSViewAnimationFadeOutEffect, NSViewAnimationEffectKey,
nil];
NSViewAnimation *animation = [[NSViewAnimation alloc] initWithViewAnimations:
[NSArray arrayWithObjects: fadeOut, fadeIn, nil]];
[animation setAnimationBlockingMode: NSAnimationBlocking];
[animation setDuration: 2.0];
[animation setAnimationCurve: NSAnimationEaseInOut];
[animation startAnimation];
[imageView removeFromSuperview];
imageView = newImageView;
[animation release];
ビューが大きく、10.5+ が必要な場合は、コア アニメーションで同じことを行うことができます。これはハードウェア アクセラレーションであり、CPU の使用量が大幅に少なくなります。
newImageView を作成したら、次のようにします。
[newImageView setAlphaValue: 0];
[newImageView setWantsLayer: YES];
// ...
[self performSelector: @selector(animateNewImageView:) withObject: newImageView afterDelay: 0];
- (void)animateNewImageView:(NSImageView *)newImageView;
{
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration: 2];
[[newImageView animator] setAlphaValue: 1];
[[imageView animator] setAlphaValue: 0];
[NSAnimationContext endGrouping];
}
中止できるようにするには、上記を変更する必要がありますが、すべてのコードを書くつもりはありません :-)
于 2010-05-09T01:59:31.300 に答える
5
CoreAnimationを使用しCALayer
て画像を保存する独自のカスタムビューを実装できます。レイヤーのプロパティを設定するcontents
と、画像は古い画像から新しい画像に自動的にスムーズにアニメーション化されます。
于 2010-05-09T02:29:00.543 に答える