UIImage непрозрачный файл png

#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;
}