나는 코코아 전체 화면 응용 프로그램을 작업 중입니다. 1 NSView
을 사용 중이고 1 CALayer
에 여러 개의 하위 레이어가 있습니다. 지금 테스트를 위해 - 나는 어떤 키 입력을 사용하여 도트 (20 x 20)를 화면에 추가합니다. 이것은 점을 그리기위한 테스트 용입니다. 제 문제는 필자의 도트 레이어에 필터를 사용하고 있다는 것입니다. 구체적으로는 CIDiscBlur
을 사용하고 약 30 도트에 도달하면 점의 드로잉이 상당히 느려집니다. 키 누름과 점 모양 사이에는 1 - 1.5 초 지연이있을 수 있습니다. 나는 레이어에서 CIDisBlur
필터를 제거하면 느려지지 않는다는 것을 알았다.CALayer 필터의 성능 향상
이 많은 하위 레이어를 그릴 때 사용해야하는 모범 사례가 있습니까? 어떤 도움이라도 좋을 것입니다.
CIFilter *blurFilter = [CIFilter filterWithName:@"CIDiscBlur"];
[blurFilter setDefaults];
[blurFilter setValue:(id)[NSNumber numberWithFloat:15.0] forKey:@"inputRadius"];
dotFilters = [[NSArray arrayWithObjects:(id)blurFilter, nil] retain];
CGColorRef purpleColor = CGColorCreateGenericRGB(0.604, 0.247, 0.463, 1.0);
CALayer *dot = [[CALayer layer] retain];
dot.backgroundColor = purpleColor;
dot.cornerRadius = 15.0f;
dot.filters = dotFilters;
NSRect screenRect = [[self.window screen] frame];
// 10 point border around the screen
CGFloat width = screenRect.size.width - 20;
CGFloat height = screenRect.size.height - 20;
#define ARC4RANDOM_MAX 0x100000000
width = ((CGFloat)arc4random()/ARC4RANDOM_MAX) * width + 10;
height = ((CGFloat)arc4random()/ARC4RANDOM_MAX) * height + 10;
dot.frame = CGRectMake(width, height, 20,20);//30, 30);
[dot addSublayer:dotsLayer];
나는 또한 도움이 있는지 확인하기 위해 masksToBounds = YES
를 사용하여 시도하지 -하지만 운.