UIToolBar с уменьшенным альфа, хотите, чтобы UIBarButtonItem имел альфа 1 - PullRequest
6 голосов
/ 14 февраля 2011

У меня есть UIToolbar с альфа-каналом, установленным на 0,6.Выглядит отлично - но он оставляет кнопки с альфа 0,6, что хорошо, но не очень желательно.Есть ли какой-нибудь способ самостоятельно установить альфа UIBarButtonItem?Как заставить их выглядеть белыми, а не слегка серыми?

Ответы [ 6 ]

12 голосов
/ 01 марта 2011
self.bottomToolbar.barStyle = UIBarStyleBlack;
self.bottomToolbar.translucent = YES;
self.bottomToolbar.backgroundColor = [UIColor clearColor];

Просмотр непрозрачности установлен в 1, и эти настройки сделали это для меня.

12 голосов
/ 24 февраля 2011

Когда вы устанавливаете альфу в представлении, все подпредставления составляются с одним и тем же альфа-значением. Что вы можете сделать вместо установки альфы на самом виде, это использовать цвет оттенка или цвет фона с альфа-значением. Это может привести к аналогичным эффектам, при этом все подпредставления не наследуют прозрачность.

toolbar.tintColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];

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

1 голос
/ 30 октября 2014

Основная проблема управления альфа-значением панели инструментов заключается в том, что оно применяется ко всей панели инструментов и ее кнопкам. Если вы установите backgroundColor с некоторым альфа-значением <1, результирующий цвет будет объединен с <code>barStyle (UIBarStyleDefault или UIBarStyleBlack), что приведет к более непрозрачному цвету, чем исходный backgroundColor. Если вы установите barTintColor, он переопределит все остальные настройки, включая любое установленное альфа-значение, что приведет к совершенно непрозрачному цвету.

Единственный способ уменьшить альфа на панели инструментов без влияния на кнопки - это установить фоновое изображение с помощью setBackgroundImage:forToolbarPosition:barMetrics:. Вы можете создать изображение размером 1 на 1 пиксель с желаемым цветом и альфа-каналом:

+ (UIImage *)onePixelImageWithColor:(UIColor *)color {
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, 1, 1, 8, 0, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedFirst);
    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
    CGImageRef imgRef = CGBitmapContextCreateImage(context);
    UIImage *image = [UIImage imageWithCGImage:imgRef];
    CGImageRelease(imgRef);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    return image;
}

[ Swift версия ]

Затем установите фоновое изображение:

[toolbar setBackgroundImage:[self onePixelImageWithColor:[[UIColor blackColor] colorWithAlphaComponent:0.7]]
         forToolbarPosition:UIBarPositionBottom
                 barMetrics:UIBarMetricsDefault];
1 голос
/ 04 сентября 2011

Я обнаружил, что barStyle на самом деле не имеет значения. Ни один не устанавливает цвет фона, чтобы очистить.

self.toolbar.barStyle = UIBarStyleDefault;
self.toolbar.tintColor = [UIColor colorWithWhite:0.0 alpha:0.5];
self.toolbar.translucent = YES;

Эти строки сделали за меня работу (ios4.3). Как я понимаю, устанавливая свойство прозрачности панелей инструментов в YES, вы устанавливаете его с чистым (прозрачным) фоном. Конечно, это зависит от выбранного вами оттенка. Если он не содержит альфа-компонент, панель будет непрозрачной.

1 голос
/ 11 августа 2011

Выше не работал для меня в iOS 4.3, но это сделало:

Подкласс UIToolbar, предоставить один метод:

- (void)drawRect:(CGRect)rect 
{
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}
0 голосов
/ 15 октября 2017

После многих часов оценки каждого из перечисленных методов я обнаружил, что возможен только метод, предоставленный Райаном Х.Это потому, что это метод, которым вы можете манипулировать альфа-значением, а другие - нет.

...