1

UIButton のカスタム サブクラスを作成して、特定の問題をカプセル化しました (クライアントは、ほとんどのボタンの背景としてグラデーションを使用したいと考えています)。これまでのところ、この取り組みは計画どおりに機能しています。

しかし、私が作成したものの 1 つは、カスタム ボタンが許可されていないため、組み込みのハイライトを置き換えるカスタム 'ハイライト' でした。次のように、強調表示のためにスーパークラス関数をオーバーライドできたことは幸運でした。

-(void) setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    NSLog(@"Set highlighted called: %i", highlighted);
    if (self.highlight==nil) {
        self.highlight=[CAGradientLayer layer];
        gradient.colors=[NSArray arrayWithObjects:
                         (id)[[UIColor colorWithWhite:1.0 alpha:.4] CGColor], 
                         (id)[[UIColor colorWithWhite:0.0 alpha:.4] CGColor],
                         nil];
    }
    if(highlighted)
    {
        [[self layer] addSublayer:highlight];
    }
    else {
        NSLog(@"Highlight should be removed...");
        NSLog(@"Highlight index: %i", [[[self layer] sublayers] indexOfObject:highlight]);
        [self.highlight removeFromSuperlayer];
        NSLog(@"Highlight index: %i", [[[self layer] sublayers] indexOfObject:highlight]);
    }
}

残念ながら、ハイライト レイヤーは適切に削除されていないようです。私のコードでわかるように、削除前 (2) と削除後 (2147483647、別名 NSNotFound) で強調表示されているインデックスを確認しています。したがって、理論的には、レイヤーから削除されます。

しかし、何らかの理由でカスタム ボタン内に表示されたままになってしまい、その理由がわかりません。

今のところ、ハイライトで背景のグラデーションの色を変更するだけで回避できますが、なぜこのコードが機能しないのか非常に興味があります.

4

0 に答える 0