У меня есть UIImageView, и я хотел добавить черную надпись поверх нее. Каков наилучший способ сделать это без необходимости переопределять drawRect? Я думал о добавлении CALayer поверх него. Но не знаете, как получить черный CALayer с .3 alpha.
Добавление черного наложения с 0,3 непрозрачностью над UIImageView
Ответ 1
Что-то вроде этого?
UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myImageView.frame.size.width, myImageView.frame.size.height / 2)];
[overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.3]];
[myImageView addSubview:overlay];
Ответ 2
Благодаря Mick MacCallum
версия Swift 3
let overlay: UIView = UIView(frame: CGRect(x: 0, y: 0, width: cell.imageView.frame.size.width, height: cell.imageView.frame.size.height))
overlay.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.1)
cell.imageView.addSubview(overlay)
Я использовал для Swift 2.2
let overlay: UIView = UIView(frame: CGRectMake(0, 0, cell.imageView.frame.size.width, cell.imageView.frame.size.height))
overlay.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.1)
cell.imageView.addSubview(overlay)
Ответ 3
Ответ MDT верен. Это еще один способ использования CAGradientLayer
рядом с UIView
. Я думаю, что он сделает то, что вы хотите, с более графическими параметрами.
сначала вы должны добавить
#import <QuartzCore/QuartzCore.h>
к вашему ViewController.m
и в любом месте, которое вы хотите добавить наложение в свой UIImage
, используйте:
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = myImageView.layer.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:
(id)[UIColor colorWithWhite:0.9f alpha:0.7f].CGColor,
(id)[UIColor colorWithWhite:0.0f alpha:0.3f].CGColor,
nil];
gradientLayer.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.5f],
nil];
//If you want to have a border for this layer also
gradientLayer.borderColor = [UIColor colorWithWhite:1.0f alpha:1.0f].CGColor;
gradientLayer.borderWidth = 1;
[myImageView.layer addSublayer:gradientLayer];
Я надеюсь, что это поможет вам сделать это
Ответ 4
Думали ли вы о добавлении UIView
с черным backgroundColor и 0,3 альфа в качестве подсмотра к представлению изображения?
Ответ 5
Это похоже на ответ MDT, за исключением использования свойств CALayer:
UIView *blackOverlay = [[UIView alloc] initWithFrame: imageView.frame];
blackOverlay.layer.backgroundColor = [[UIColor blackColor] CGColor];
blackOverlay.layer.opacity = 0.3f;
[self.view addSubview: blackOverlay];