質問

NSViewにCatransitionアニメーションを追加したいと思います。次のコードがあります。

[contentView setWantsLayer:YES];
NSRect rect = [contentView bounds];

NSData *shadingBitmapData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"restrictedshine" ofType:@"tiff"]]; // took from Apple's example
NSBitmapImageRep *shadingBitmap = [[[NSBitmapImageRep alloc] initWithData:shadingBitmapData] autorelease];
CIImage *inputShadingImage = [[[CIImage alloc] initWithBitmapImageRep:shadingBitmap] autorelease];
CIFilter *transitionFilter = [CIFilter filterWithName:@"CIRippleTransition"];
[transitionFilter setDefaults];
[transitionFilter setValue:[CIVector vectorWithX:NSMidX(rect) Y:NSMidY(rect)] forKey:@"inputCenter"];
[transitionFilter setValue:[CIVector vectorWithX:rect.origin.x Y:rect.origin.y Z:rect.size.width W:rect.size.height] forKey:@"inputExtent"];
[transitionFilter setValue:inputShadingImage forKey:@"inputShadingImage"];

CATransition *presentAnimation = [CATransition animation];
[presentAnimation setFilter:transitionFilter];
[presentAnimation setDuration:1.0];
[presentAnimation setDelegate:self];

[contentView setAnimations:[NSDictionary dictionaryWithObject:presentAnimation forKey:@"subviews"]];
// maybe there are memory leaks in this code, don't bother at this moment

問題は:

  1. このコードを実行します。

  2. そうです [[contentView animator] addSubview:mySubview]; 初めては機能しません。表示が表示されます。 CATransition 委任方法は呼び出されますが finished フラグはno(false)です。

  3. ビューを削除します [mySubview removeFromSuperview]; そして、それはアニメーションで削除されます、 finished flag = yes(true)。

  4. 手順2と3を繰り返すと、アニメーションで動作します。ステップ2は、アニメーションがあったことを示しています finished (はい)。期待どおりに機能します。

どうしたの?

役に立ちましたか?

解決

問題が解決しました。

初めに: [contentView setWantsLayer:YES];, 、そしてこれはアニメーションを実行する前に設定する必要があります。これにより良い場所です awakeFromNib また init 方法、またはこのようなもの。コアアニメーションを有効にする必要があります contentView, 、UIの描画を実行し(アプリにこれを行うことを許可します)、アニメーションを実行します。私の場合、私はコアアニメーションを有効にし、すぐにアニメーションを実行しました。だからこそ、それは私にとってはうまくいきませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top