あっちこっち、
カスタムUIViewがあります。このビューはアクティビティインジケーターとして機能しますが、UIActivityIndicatorViewの上のラベルとして機能します。initで、CAGradientLayerを追加します。それを割り当てて初期化し、UIViewレイヤープロパティのサブレイヤーとしてインデックス0に挿入します。私のdeallocメソッドが呼び出されたときに、コンソールに次のメッセージが表示されました。
- [CALayer release]: message sent to deallocated instance.
私のコード:
@interface LabelActivityIndicatorView ()
{
UILabel *_label;
UIActivityIndicatorView *_activityIndicatorView;
CAGradientLayer *_gradientLayer;
}
@end
@implementation LabelActivityIndicatorView
//dealloc
- (void) dealloc
{
[_label release];
[_activityIndicatorView release];
//even tried to remove the layer
[_gradientLayer removeFromSuperLayer];
[_gradientLayer release];
[super dealloc];
}
// init
- (id) initWithFrame:(CGRect)frame
{
if ( (self = [super initWithFrame:frame]) )
{
// init the label
// init the gradient layer
_gradientLayer = [[CAGradientLayer alloc] init];
[_gradientLayer setBounds:[self bounds]];
[_gradientLayer setPosition:CGPointMake(frame.size.width/2, frame.size.height/2)];
[[self layer] insertSublayer:_gradientLayer atIndex:0];
[[self layer] setNeedsDisplay];
}
return self;
}
@end
誰でもアイデアがあります。グラデーションレイヤーの割り当てと初期化を行っているので、それを解放する責任があります。いくつかのivarを割り当てて初期化し、割り当てることができるはずです。おそらく、retainを使用してプロパティを作成する必要があります。
ありがとう、