私はCocoaフルスクリーンアプリケーションを開発中です。私は1 NSView
を使用していますが、1 CALayer
には複数のサブレイヤがあります。テストのために今私は画面にドット(20×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
を使用してみました - しかし、何の運。