gpt4 book ai didi

ios - iOS 中设置 CAGradient UIButton 的选中状态

转载 作者:行者123 更新时间:2023-11-29 04:09:49 24 4
gpt4 key购买 nike

您好,我在我的 View Controller 之一中使用角半径 CAGradientLayer 和边框颜色在代码中制作了一个自定义按钮,如下所示:

phoneButton = [CustomButton buttonWithType:UIButtonTypeCustom];
phoneButton.frame = CGRectMake(6, 363, 99, 48);
phoneButton.titleLabel.font = [UIFont fontWithName:@"Futura-Medium" size:14];
phoneButton.titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:1.0];
phoneButton.titleLabel.shadowOffset = CGSizeMake(0, 1);
[phoneButton setTitle:@"Phone" forState:UIControlStateNormal];
[phoneButton addTarget:self action:@selector(phone) forControlEvents:UIControlEventTouchUpInside];

gradient = [CAGradientLayer layer];
gradient.frame = phoneButton.bounds;
gradient.cornerRadius = 8;
gradient.borderColor = [[UIColor whiteColor]CGColor];
gradient.borderWidth = 2.0;
gradient.colors = [NSArray arrayWithObjects:(id)[[sharedManager cellGradientEnd] CGColor], (id)[[sharedManager cellGradientStart] CGColor], nil];
[phoneButton.layer insertSublayer:gradient atIndex:0];
[self.view addSubview:phoneButton];

现在我想设置选择时按钮的选定/突出显示颜色。我该怎么做呢。我读过创建一个 UIbutton 子类并覆盖 setSelected 但我不知道如何做到这一点。这是customButton子类.m

#import "CustomButton.h"

@implementation CustomButton
@synthesize sharedManager;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
sharedManager = [[MySingleton alloc]init];

}
return self;
}


-(void) setHighlighted:(BOOL)highlighted {

if(highlighted) {
NSLog(@"Highlighted");


} else {
NSLog(@"Not Highlighted");

}

[super setHighlighted:highlighted];
}

-(void) setSelected:(BOOL)selected {

if(selected) {
NSLog(@"Selected");

} else {
NSLog(@"Not Selected");
}
[super setSelected:selected];
}



@end

或者只是将选择按钮变暗就可以了?我应该补充一点,该按钮不在 Xib 中。

最佳答案

我只是通过在 subclass.m 中创建按钮的选定渐变和未选定渐变状态来解决这个问题,现在一切都工作得很好!

- (CustomButton *)buttonWithType:(UIButtonType)type
{
return [self buttonWithType:UIButtonTypeCustom];
}


- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code

}
return self;
}

- (id)initWithCoder:(NSCoder *)coder
{
//Call the parent implementation of initWithCoder
self = [super initWithCoder:coder];

//Custom drawing methods
if (self)
{

[self drawBackgroundLayer];
[self drawHighlightBackgroundLayer];

highlightBackgroundLayer.hidden = YES;


}

return self;
}

-(void)loadSingleton{

sharedManager = [[MySingleton alloc]init];

}

- (void)layoutSubviews
{

// Set gradient frame (fill the whole button))
backgroundLayer.frame = self.bounds;

// Set inverted gradient frame
highlightBackgroundLayer.frame = self.bounds;

[super layoutSubviews];
}



- (void)drawBackgroundLayer
{
[self loadSingleton];
// Check if the property has been set already
if (!backgroundLayer)
{
backgroundLayer = [CAGradientLayer layer];
backgroundLayer.cornerRadius = 8;
backgroundLayer.borderWidth = 1.5;
backgroundLayer.borderColor = [UIColor whiteColor].CGColor;
backgroundLayer.colors = [NSArray arrayWithObjects:(id)[[sharedManager cellGradientEnd] CGColor], (id)[[sharedManager cellGradientStart] CGColor], nil];

// Add the gradient to the layer hierarchy
[self.layer insertSublayer:backgroundLayer atIndex:0];
}
}

- (void)drawHighlightBackgroundLayer
{
[self loadSingleton];
if (!highlightBackgroundLayer)
{
highlightBackgroundLayer = [CAGradientLayer layer];
highlightBackgroundLayer.cornerRadius = 8;
highlightBackgroundLayer.borderWidth = 1.5;
highlightBackgroundLayer.borderColor = [UIColor whiteColor].CGColor;
highlightBackgroundLayer.colors = [NSArray arrayWithObjects:(id)[[sharedManager cellSelectedGradientEnd] CGColor], (id)[[sharedManager cellSelectedGradientStart] CGColor], nil];

[self.layer insertSublayer:highlightBackgroundLayer atIndex:1];
}
}

并将所选状态设置为开或关

- (void)setHighlighted:(BOOL)highlighted
{
NSLog(@"Selected");

// Disable implicit animation
[CATransaction begin];
[CATransaction setDisableActions:YES];

// Hide/show inverted gradient
highlightBackgroundLayer.hidden = !highlighted;
[CATransaction commit];

[super setHighlighted:highlighted];
}

关于ios - iOS 中设置 CAGradient UIButton 的选中状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14588560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com