2013-05-14 2 views
4

그라디언트 단추가 있기 때문에 사용자 지정 단추를 만듭니다. 그래서이 코드를 사용하여 구현합니다.사용자 지정 단추를 강조 표시하는 방법

@implementation CustomButton 


- (id)initWithFrame:(CGRect)frame 
{ 
    if((self = [super initWithFrame:frame])){ 
     [self setupView]; 
    } 

    //[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil]; 
    return self; 
} 

- (void)awakeFromNib { 
    [self setupView]; 
} 

# pragma mark - main 

- (void)setupView 
{ 
    self.layer.cornerRadius = 10; 
    self.layer.borderWidth = 1.0; 
    self.layer.borderColor = [UIColor colorWithRed:167.0/255.0 green:140.0/255.0 blue:98.0/255.0 alpha:0.25].CGColor; 
    self.layer.shadowColor = [UIColor blackColor].CGColor; 
    self.layer.shadowRadius = 1; 
    [self clearHighlightView]; 

    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = self.layer.bounds; 
    gradient.cornerRadius = 10; 
    gradient.colors = [NSArray arrayWithObjects: 
         (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor, 
         (id)[UIColor colorWithWhite:1.0f alpha:0.2f].CGColor, 
         (id)[UIColor colorWithWhite:0.75f alpha:0.2f].CGColor, 
         (id)[UIColor colorWithWhite:0.4f alpha:0.2f].CGColor, 
         (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor,       nil]; 
    // float height = gradient.frame.size.height; 
    gradient.locations = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0f], 
          [NSNumber numberWithFloat:0.5f], 
          [NSNumber numberWithFloat:0.5f], 
          [NSNumber numberWithFloat:0.8f], 
          [NSNumber numberWithFloat:1.0f], 
          nil]; 
    [gradient setBackgroundColor:[UIColor redColor].CGColor]; 
    [self.layer insertSublayer:gradient atIndex:0]; 
} 

이제 그라디언트가 완료되었습니다. 그러나이 버튼을 누르면 하이라이트 된 상태가 표시되지 않습니다.

나는 단지 색깔이 깊어지면 좋겠어. 누구든지 이것을 구현하는 방법을 알고 있습니까? 감사합니다

+1

당신은 – Ushan87

+0

내가 여기 서브 클래스 코드를 추가하십시오뿐만 아니라 사용자 정의 버튼의 구현을 추가 할 수 있습니다. 버튼을 누르면 색이 깊어지기를 원할뿐입니다. 색상을 직접 변경해야합니까? 단추가 빨간색이면 누르는 것처럼 깊어 야합니다. 그렇다면 심도있는 색상의 구성 요소를 알아야합니다. 어, RGB 색상을 얻는 방법을 모르겠습니다. 감사합니다 – zedzhao

답변

1

UIButton을 서브 클래스 화하면 setHighlighted 메소드를 대체 할 수 있습니다. 여기서 버튼에 다른 Gradient을 설정할 수 있습니다.

- (void)setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 

} 
0

그래디언트 사용 UIButton은 두통이 심하고 메모리에 많은 영향을줍니다. 특히 강조 표시된 상태도 필요합니다.

이 모양은 Tutorial입니다. UIButton에 대한 이미지 및 그라디언트의 사용법을 설명합니다. 이미지를 사용하여 매우 쉽게 항상 제안

,

+0

예. 좋은 충고, 나는 UIButton과 UIControl에 대해 깊이 이해하려고 노력할 것이다. 감사. – zedzhao

관련 문제