버튼에 그라디언트를 하위 레이어로 지정한 후에 제목을 추가하면 버튼 제목이 앞에 표시된다는 사실을 알고 있습니다.버튼 제목이 그라디언트 레이어 뒤쪽으로 이동합니다
하지만이 경우는 다릅니다.
정상적인 상태에서 그라데이션을 변경하고 버튼을 눌렀습니다.
여기 내 코드입니다 : 내가 응용 프로그램을 시작할 때
-(void) buttonClicked:(UIButton*)sender{
sender.backgroundColor = [UIColor clearColor];
// Finding old gradient layer to remove it
for (CALayer *layer in [sender.layer.sublayers copy]){
if ([[layer name] isEqualToString:@"gradientLayer"]) {
[layer removeFromSuperlayer];
}
}
// Applying the new gradient
UIColor *colorTwo = [UIColor colorWithRed:1.00 green:0.81 blue:0.00 alpha:0.95]; // Original
UIColor *colorThree = [[UIColor brownColor] colorWithAlphaComponent:1];
UIColor *colorFour = [[UIColor blackColor] colorWithAlphaComponent:0.9];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = sender.layer.bounds;
gradientLayer.colors = [NSArray arrayWithObjects: (id)[[UIColor whiteColor] colorWithAlphaComponent:0.5].CGColor,(id) colorTwo.CGColor,(id) colorThree.CGColor,(id) colorFour.CGColor, nil];
gradientLayer.locations = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:1.0f], nil];
sender.layer.cornerRadius = 5;
gradientLayer.cornerRadius = sender.layer.cornerRadius;
// Adding gradient
[sender.layer addSublayer:gradientLayer];
gradientLayer.name = @"gradientLayer";
// Adding title after applying the gradient (BUT ALSO TITLE IS GOING BEHIND THE GRADIENT)
sender.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
sender.titleLabel.numberOfLines = 2;
NSString *str = sender.titleLabel.text;
[sender setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[sender setTitle:str forState:UIControlStateNormal];
}
-(void) touchedDown:(UIButton*)sender{
// Finding old gradient layer to remove it
for (CALayer *layer in [sender.layer.sublayers copy]){
if ([[layer name] isEqualToString:@"gradientLayer"]) {
[layer removeFromSuperlayer];
}
}
// Applying the new gradient
CAGradientLayer *gradientLayer1 = [CAGradientLayer layer];
gradientLayer1.frame = sender.layer.bounds;
gradientLayer1.colors = [NSArray arrayWithObjects: (id)[[UIColor whiteColor] colorWithAlphaComponent:0.5].CGColor, (id)[UIColor colorWithWhite:0.4f alpha:0.2f].CGColor,(id)[UIColor colorWithWhite:0.4f alpha:0.2f].CGColor, nil];
gradientLayer1.locations = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:1.0f], nil];
gradientLayer1.cornerRadius = sender.layer.cornerRadius;
// Adding Gradient
[sender.layer addSublayer:gradientLayer1];
gradientLayer1.name = @"gradientLayer";
sender.backgroundColor = [UIColor blackColor];
[sender setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
}
처음에, 제목은 전면에 있습니다. 그러나 그것을 클릭하기 시작하면 제목이 그라디언트 뒤에 표시됩니다. 이 문제에 대해 친절히 도와주세요. 시간 (주셔서 감사 : 수단
[sender.layer addSublayer:gradientLayer];
:.
색인을 어떻게 찾을 수 있습니까? –
OMG 맨 .. 매력처럼 일했습니다. 'insertSublayer : atIndex'에 대한 정보를 가져 주셔서 감사합니다. 고마워. –
도와 줘서 기쁩니다.하지만 배경 이미지 대신 레이어를 설정하는 것처럼 들립니다. 정말 그렇게해서는 안됩니다! :) – matt