Я создаю 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, но я попробовал их все, и ни одна из них не работает.
Есть идеи, чего мне не хватает?