NSViewのCATransitionアニメーションを追加します。CIFilterを使用した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
問題は次のとおりです:
私はこのコードを実行し、私は次のコードを持っています。
私は初めて
[[contentView animator] addSubview:mySubview];
を実行しますが、動作しません。ビューが表示されます。CATransition
代理メソッドが呼び出されますが、finished
フラグはNO(偽)です。[mySubview removeFromSuperview];
でビューを削除し、アニメーションで削除すると、フラグ= YES(真)になります。手順2と3を繰り返して、アニメーションと連動します。ステップ2では、アニメーションが
finished
(YES)であることがわかりました。期待どおりに動作します。
何が問題なのですか。