#ios #objective-c #uibutton #uiimage #transparency
#iOS #objective-c #uibutton #uiimage #прозрачность
Вопрос:
У меня есть простой png-файл. Изображение представляет собой прямоугольник с синей рамкой и прозрачной заливкой.
Я добавляю это в свой UIButton вот так:
[myButton setImage:[UIImage imageNamed:@"CustomisationsBorder.png"] forState:UIControlStateSelected];
Почему прозрачность не сохраняется, когда я добавляю ее в свой UIButton?
У меня есть несколько кнопок на странице, и я не хочу создавать обычное состояние изображения и выбранное состояние изображения..
Комментарии:
1. Потому что UIButton также имеет свою собственную альфа-версию.
2. даже если я настрою альфа-версию, это приведет к исчезновению всей кнопки.
3. Да, вся кнопка исчезнет, когда вы уменьшите альфа-значение кнопки.
4. Проверьте это: 1) тип uibutton должен быть UIButtonTypeCustom 2) создайте проект / Очистите, чтобы убедиться, что правильное изображение было отправлено на тестовое устройство. Также попробуйте добавить для состояния UIControlStateNormal, чтобы проверить, все ли в порядке для нормального состояния кнопки.
5. На самом деле я выделил кнопку в подкласс, но теперь использую стандартный UIButton, чтобы я мог изменить тип. Это тоже не сработало. Очищен, и я установил нормальное состояние UIButton [MyButton setImage:[UIImage imageNamed:@»NormalState.png»] для состояния:UIControlStateNormal];
Ответ №1:
Поскольку кнопки iOS7 отображают свое изображение в виде маски, раскрашенной их оттенком. Все не полностью прозрачные пиксели будут отображаться в цвете. Поэтому убедитесь, что ваша внутренняя заливка полностью прозрачна, или используйте:
[myButton setBackgroundImage:image forState:UIControlStateSelected]
или убедитесь, что исходное изображение визуализировано
[[UIImage imageNamed:@"CustomisationsBorder.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
Комментарии:
1. Заливка моего изображения прозрачна. Я вижу прозрачность в xcode, когда просматриваю изображение, и устанавливаю прозрачность в illustrator. Но когда он находится в симуляторе, он был залит белым. Uiimagerenderingmodealwaysоригинально не сработал
Ответ №2:
На данный момент я выбрал это решение. Этот код был доступен здесь и где-то в случайном блоге.
- (UIImage*)imageWithBorderFromImage:(UIImage*)source {
CGSize size = [source size];
UIGraphicsBeginImageContext(size);
CGRect rect = CGRectMake(0, 0, size.width, size.height);
[source drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0);
CGContextSetLineWidth(context, 5.0);
CGContextStrokeRect(context, rect);
UIImage *testImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return testImg;
}