У меня есть прозрачное изображение, которое («hold_empty.png», внизу), которое я хочу превратить в кнопку. Внутри кнопки будет вид с цветным фоном, который немного меньше размера, чем фактическое изображение, чтобы удерживать цвет фона.Создание прозрачной кнопки изображения с bgcolor
Причина этого заключается в том, что изображение имеет закругленные углы, и поэтому я не могу просто поместить фоновый цвет на изображение, поскольку оно будет больше, чем изображение.
Изображение представляет собой прозрачный квадрат с закругленными углами "". Эффект, который я пытаюсь создать, должен быть похож на слои.
- Цвет фона слой (красный, зеленый, и т.д.)
- "hold_empty.png" картинка (выше)
- Весь объект (в том числе BG цветного слоя) должны быть интерактивными.
Проблема, с которой я столкнулась, заключается в том, что только изображение (и его границы), как представляется, доступно для кликов, а не для всего объекта.
Код приведен ниже.
// x,y,w,h
CGRect frame = CGRectMake(10, 10, 72, 72);
CGRect frame2 = CGRectMake(5, 5, 60, 60); // I know this is not filling the image, its just a test
UIView *bgColorView = [[UIView alloc] initWithFrame:frame2];
[bgColorView setFrame:frame2];
bgColorView.backgroundColor = [UIColor redColor];
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"hold_empty" ofType:@"png"]];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn addSubview:bgColorView];
[btn setImage:image forState:UIControlStateNormal];
btn.frame = frame;
[btn addTarget:self action:@selector(btnSelectColor:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
[bgColorView release];
Итак, чтобы подвести итог: Как сделать прозрачную кнопку изображения с цветным фоном?
Спасибо.
Я попытался положить clipToBounds сначала на UIView * bgColorView, затем * btn, затем оба; независимо от того, где я заставил clipToBounds быть правдой, он просто дал бы мне тот же результат - сам образ кликабель, но не цветная часть фона. Я попытался удалить слой bgColor и просто вставить цвет фона в btn с помощью clipToBounds = YES, но он все еще перекрывает изображение. Я мог бы пропустить что-то с вашим объяснением. – zardon
Нечетный. Область (фон), о которой вы говорите, имеет ширину всего 5 пикселей в верхней и левой частях экрана и 17 пикселей справа и внизу, верно? – mvds
Фоновая область - это размеры, которые вы указываете, потому что я тестирую только, можно ли его можно кликать независимо от его размера. Он будет того же размера, что и изображение (минус несколько пикселей) в финальной версии. – zardon