我正在開發一個Cocoa全屏應用程序。我正在使用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
看看是否有幫助 - 但沒有運氣。