Как заставить UIButton правильно использовать маскированное изображение? - PullRequest
1 голос
/ 06 октября 2010

Я создаю UIButton программно, а затем добавляю маскированное изображение с помощью setImage:

CGRect photoFrame = CGRectMake(11, 11, 180, 120);
UIButton *cardPhotoButton = [[UIButton alloc] initWithFrame:photoFrame];
cardPhotoButton.backgroundColor = [UIColor clearColor];

UIImage *cardPhoto = [[UIImage alloc] init];
cardPhoto = [self maskImage:
[UIImage imageNamed:[metaDict objectForKey:@"Photo"]] withMask:[UIImage imageNamed:@"CardPhotoFrame.png"]];

[cardPhotoButton setImage:cardPhoto forState:UIControlStateNormal];

cardPhotoButton.contentMode = UIViewContentModeScaleAspectFit;

[self addSubview:cardPhotoButton];

Маскирование выполняется с помощью метода, полученного из Интернета:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                        CGImageGetHeight(maskRef),
                                        CGImageGetBitsPerComponent(maskRef),
                                        CGImageGetBitsPerPixel(maskRef),
                                        CGImageGetBytesPerRow(maskRef),
                                        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
    return [UIImage imageWithCGImage:masked];
}

Теперь проблема в том, что маскирование для состояния по умолчанию не работает, но странно, когда я фактически нажимаю кнопку и кнопка переходит в состояние «подсвечено», прозрачные части маскированного изображения начинают работать.

Полагаю, мне нужно установить где-нибудь цвет BG, чтобы где-нибудь очистить ColorColor, но я попробовал их все, и ни одна из них не работает.

Есть идеи, чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 06 октября 2010

каково ваше фактическое требование?Вам нужны разные изображения для нормального и выделенного состояния или размер изображения не соответствует кнопке?

Если проблема заключается в неправильном подборе изображения, то причина в том, что вам нужно установить тип кнопки как пользовательский.

0 голосов
/ 11 декабря 2012

вы можете использовать: OBShapedButton, https://github.com/ole/OBShapedButton

OBShapedButton - это подкласс UIButton, оптимизированный для непрямоугольных форм кнопок. Экземпляры OBShapedButton реагируют на прикосновения только в областях, где изображение, назначенное кнопке для UIControlStateNormal, непрозрачно.

Я получил ответ на этот вопрос: Как создать круговую кнопку UIB?

у меня сработало отлично :)

...