簡単なスライド メニューを作成しようとしています。
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
正常に動作します。
誰かが私にこのラウンドをどのように行うことができるか教えてもらえますか?