2012-05-03 4 views
0

У меня есть закругленный прямоугольник UIButton и вы хотите добавить к нему тень, но когда я установил тень фонового изображения, не видно, я думаю, что фон накладывает тень. без тени фонового изображения виднаcustom UIButton shadow

customBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    customBtn.frame=CGRectMake(customBtn.frame.origin.x, customBtn.frame.origin.y, 30, 30); 
    [customBtn setImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal]; 
    [customBtn setBackgroundImage:[[UIImage imageNamed:@"bg.png"] stretchableImageWithLeftCapWidth:0 topCapHeight:0] forState:UIControlStateNormal]; 
    customBtn.layer.cornerRadius=9; 

customBtn.layer.shadowColor = [UIColor redColor].CGColor; 
    customBtn.layer.shadowOpacity = 1.0; 
    customBtn.layer.shadowRadius = 1; 
    customBtn.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); 
customBtn.clipsToBounds=YES; 
+1

попробуйте удалить clipToBounds = YES (или установить его как НЕТ) – giorashc

ответ

1

Благодаря внутренней структуре UIButton, лучше всего, чтобы создать растяжение фонового изображения, которое включает в себя тень.

UIImage *bgWithShadow = [[UIImage imageNamed: @"bg.png"] 
          stretchableImageWithLeftCapWidth: 10 
               topCapHeight: 0]; 
[customBtn setBackgroundImage: bgWithShadow 
        forState: UIControlStateNormal]; 

В этом примере предполагается, что bg.png является 21-пикселей в ширину изображения, которая включает в себя тень. В принципе, вам не нужно ничего делать, как доступ к слою кнопки или изменение его свойства clipsToBounds. См. this question, чтобы получить представление о растягиваемом изображении (с картинками!).

Отметьте, что stretchableImageWithLeftCapWidth:topCapHeight: устарел в пользу resizableImageWithCapInsets:.