0

簡単なスライド メニューを作成しようとしています。

NSViewガウスぼかしを作成し、それに適用しましたCALayer

//メニューのinitWithFrameメソッド。

m_blur = [CIFilter filterWithName:@"CIGaussianBlur"];
[m_blur setDefaults];
[m_blur setValue: [NSNumber numberWithFloat:7] forKey:@"inputRadius"];
m_backgroundFiltersArray = [NSArray arrayWithObject:m_blur];

- (void)setVisible:(BOOL)bVisible
{
    @autoreleasepool
    {
        if (!bVisible)
        {
            [self.layer setBackgroundFilters:nil];
            [self.layer.superlayer setBackgroundFilters:nil];
        }
        else
        {
            [self.layer setBackgroundFilters:m_backgroundFiltersArray];
            //Also Update the Driver's Parameters here.
        }
    }
    [self setNeedsDisplay:YES];
}

私のアプリのメインビューでは、このようにメニューを呼び出しています

フレームで初期化

m_menuView = [[MenuView alloc]initWithFrame:NSMakeRect(-fcMenuWidth, 0, fcMenuWidth, 446.0)];
[m_menuView setDelegate:self];
[self addSubview:m_menuView];


- (void)summonMenu
{
    if(!m_bMenuUp)
    {
        m_bMenuUp = YES;
        [m_menuView setVisible:YES];
        [[m_menuView animator] setFrame:NSMakeRect(0, 0, fcMenuWidth, self.frame.size.height)];
    }
}
- (void)hideMenu
{
    if (m_bMenuUp)
    {
        m_bMenuUp = NO;
        [m_menuView cancelPopUpButtons];

        [[m_menuView animator] setFrame:NSMakeRect(-fcMenuWidth, 0, fcMenuWidth, self.frame.size.height)];
        [m_menuView setVisible:NO];
    }
}

ただし、メニューを非表示にしたり呼び出したりするたびに、メモリリークが少し発生します。

Instrumentsでプロファイルしようとしました-OpenGL毎回約768バイトのリークがあるコンテキストについて説明します。

私は関数をいじっm_menuView setFrame:て、プロパティなしで呼び出す.animatorと、すべて正常に動作し、リークが発生しないことを発見しました。また、無効CIFilterにして使用するとanimator正常に動作します。

誰かが私にこのラウンドをどのように行うことができるか教えてもらえますか?

ここに画像の説明を入力

ここに画像の説明を入力

4

0 に答える 0