Показать подсветку на кнопке UIB с подпредставлением - PullRequest
1 голос
/ 26 октября 2011

Я пытаюсь создать кнопку UI, которая имеет следующие характеристики: * Пользовательское изображение в качестве его содержимого * Закругленные углы * Тень

Использование следующего кода отформатирует кнопку для правильного отображения и функционированияно действие выделения (т. е. затемнение кнопки при касании) теряется при касании.Есть идеи?

+(void) styleButton:(UIButton*)button{
    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(button.bounds.origin.x, button.bounds.origin.y, button.bounds.size.width, button.bounds.size.height)];    

    CALayer *sublayer = [CALayer layer];
    sublayer.shadowOffset = CGSizeMake(0, 3);
    sublayer.shadowRadius = 5.0;
    sublayer.shadowColor = [UIColor blackColor].CGColor;
    sublayer.shadowOpacity = 0.8;

    sublayer.frame = CGRectMake(button.bounds.origin.x, button.bounds.origin.y, button.bounds.size.width, button.bounds.size.height);

    backgroundView.userInteractionEnabled = NO;

    [backgroundView.layer addSublayer:sublayer];

    [button insertSubview:backgroundView atIndex:0];

    CALayer *imageLayer = [CALayer layer];
    imageLayer.frame = sublayer.bounds;
    imageLayer.cornerRadius = 10.0;
    imageLayer.contents = (id) [UIImage imageNamed:@"myImage.png"].CGImage;
    imageLayer.cornerRadius = 5.0f;
    imageLayer.masksToBounds = YES;
    [sublayer addSublayer:imageLayer];
}

Ответы [ 2 ]

4 голосов
/ 01 декабря 2011

Вы пытались преобразовать backgroundView в UIImage и добавить его в кнопку вместо добавления backgroundView в качестве подпредставления?Это сохранит затемнение при нажатии кнопки:

UIGraphicsBeginImageContext(backgroundView.frame.size);
[backgroundView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[button setImage:image forState:UIControlStateNormal];
0 голосов
/ 03 июля 2014

Как это (ARC включен):

UIGraphicsBeginImageContextWithOptions(self.button.bounds.size, NO, [[UIScreen mainScreen] scale]);

CGContextRef context = UIGraphicsGetCurrentContext();

for (UIView *aView in self.button.subviews) {

    CGContextSaveGState(context);
    CGContextTranslateCTM(context, aView.frame.origin.x, aView.frame.origin.y);
    [aView.layer renderInContext:UIGraphicsGetCurrentContext()];
    CGContextRestoreGState(context);
}

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

[self.button setImage:image forState:UIControlStateNormal];
[self.button.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
[self.button setAdjustsImageWhenHighlighted:YES];
...