2012-10-20 9 views
3

CAGradientLayer를 사용하여 UIButton을 사용자 정의하고 모서리를 반올림하고 레이어 주변에 테두리를 추가하여 사용자 정의 스타일 UIButton을 내 View Controller에 구현했습니다. Gradient buttoniPhone iOS 맞춤 UIButton (CAGradientLayer 포함), 터치하는 방법을 알려주세요.

나는이 버튼의 모양과 느낌이 마음에 들며 미리 렌더링 된 이미지를 사용하지 않고도 매우 쉽게 달성 할 수 있습니다. 하지만 한 가지 문제가 있습니다. UIButton이 터치하는 방식에 응답하지 않는 버튼이입니다. 예를 들어, 일반적인 둥근 사각형 단추는 도청 될 때 파란색으로 강조 표시되지만 내 단추는 강조 표시하지 않습니다.

아래 코드에 따라 UButton에서 CAGradientLayer 사용자 정의 배경을 사용하는 경우 어떻게 "터치 하이라이트 버튼"동작을 수행 할 수 있습니까?

입력 해 주셔서 감사합니다.

+(void)addLinearGradientToView:(UIView*)view TopColor:(UIColor*)topColor BottomColor:(UIColor*)bottomColor 
{ 
    for(CALayer* layer in view.layer.sublayers) 
    { 
     if ([layer isKindOfClass:[CAGradientLayer class]]) 
     { 
      [layer removeFromSuperlayer]; 
     } 
    } 
    CAGradientLayer* gradientLayer = [CAGradientLayer layer]; 
    //top down gradient 
    gradientLayer.startPoint = CGPointMake(0.5, 0); 
    gradientLayer.endPoint = CGPointMake(0.5,1); 
    gradientLayer.frame = view.bounds; 



    gradientLayer.colors = [NSArray arrayWithObjects:(id)[topColor CGColor], (id)[bottomColor CGColor], nil]; 

    [view.layer insertSublayer:gradientLayer atIndex:0]; 

} 

답변

4

UIButton을 서브 클래스 화하면 setHighlighted 메소드를 무시할 수 있습니다. 여기서 버튼에 다른 그라디언트를 설정하거나 배경색을 변경할 수 있습니다.

- (void)setHighlighted:(BOOL)highlighted { 
    [super setHighlighted:highlighted]; 
    // Update the looks of the button 
} 
0

코드의 for 루프가 오류를 발생시킵니다.

당신이해야 뒤쪽이

NSEnumerator *enumerator = [btn.layer.sublayers reverseObjectEnumerator]; 
for(CALayer *layer in enumerator) { 
    if ([layer isKindOfClass:[CAGradientLayer class]]) 
    { 
     [layer removeFromSuperlayer]; 
    } 
} 
같은 층을 반복
관련 문제