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];
로보기를 제거하고 애니메이션을 사용하여finished
flag = YES (true)를 제거합니다.2 단계와 3 단계를 반복하여 애니메이션과 함께 작동합니다. 이제 2 단계에서는 애니메이션이
finished
(예)이라고 알려줍니다. 예상대로 작동합니다.
무엇이 잘못 되었습니까?