Я работаю над полноэкранным приложением Cocoa. Я использую 1 NSView
, который имеет 1 CALayer
, который имеет несколько подслоев. Прямо сейчас для тестирования - я использую любые нажатия клавиш, чтобы добавить точки (20 х 20) на экран. Это только для тестирования рисования точек. Моя проблема в том, что я использую фильтр на своих точечных слоях - в частности, я использую CIDiscBlur
- и как только я достигну примерно 30 точек - рисование точек значительно замедляется. Между нажатием клавиши и появлением точки может быть задержка в 1 - 1,5 секунды. Я заметил, что если я удаляю установку фильтра CIDisBlur
на слоях - замедление не происходит.
Есть ли какие-либо передовые практики или советы, которые я должен использовать при рисовании такого количества подслоев? Любая помощь будет великолепна.
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
, чтобы посмотреть, помогло ли это - но не повезло.