我希望在我的UIImageView
中创建类似阴影的渐变,就像在Flipboard中一样。
它的一个例子是这张图片中的图片
正如您在右侧iPhone上看到的那样,顶部和底部有一个较暗的渐变。这样,如果图片为白色,仍然可以看到白色文字。
有人对我如何实现这个有任何建议吗?我是iOS开发的新手,因此对此毫无头绪。谢谢!
答案 0 :(得分:20)
您可以使用CAGradientLayer
:
将QuartzCore.framework添加到您的项目中。 (见Linking to Library or Framework)。
导入QuartzCore标题:
#import <QuartzCore/QuartzCore.h>
在相关视图中添加CAGradientLayer
。例如,对于从灰色到白色的简单渐变:
- (void)addGradientToView:(UIView *)view
{
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = @[(id)[[UIColor lightGrayColor] CGColor],
(id)[[UIColor whiteColor] CGColor]];
[view.layer insertSublayer:gradient atIndex:0];
}
或者从一种灰色阴影到另一种颜色,然后回来:
- (void)addGradientToView:(UIView *)view
{
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = @[(id)[[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1.0] CGColor],
(id)[[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1.0] CGColor],
(id)[[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1.0] CGColor]];
[view.layer insertSublayer:gradient atIndex:0];
}
只需更改数组colors
中的颜色即可更改渐变以获得所需效果。您可能希望将图像视图放在容器视图中,并将渐变应用于容器视图,而不是图像视图。此外,可能很明显,但这假设您在UIImageView
中使用的图像采用透明背景。如果他们不这样做,你将不得不改变它们(a)在图像中构建渐变;或(b)用透明度替换图像的背景,以便可以看到上述CAGradientLayer
效果。
答案 1 :(得分:6)
现在这个工作正确地应用到UIImageView层
// Set image over layer
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = imageView.frame;
// Add colors to layer
UIColor *centerColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.25];
UIColor *endColor = [UIColor grayColor];
gradient.colors = [NSArray arrayWithObjects:
(id)[endColor CGColor],
(id)[centerColor CGColor],
(id)[endColor CGColor],
nil];
[imageView.layer insertSublayer:gradient atIndex:0];
从here
获取答案 2 :(得分:1)
SWIFT 3
let gradient = CAGradientLayer()
gradient.frame = imageView.bounds
let startColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0.25)
let endColor = UIColor.gray
gradient.colors = [startColor.cgColor, endColor.cgColor]
imageView.layer.insertSublayer(gradient, at: 0)
答案 3 :(得分:0)
我在我的应用程序中完成了这个效果,之后只需在照片上覆盖包含暗区的透明图像。实施方式,通常意味着在视图层次结构中的照片视图上方插入另一个UIImageView
。
答案 4 :(得分:0)
翻译成Swift:
var gradient = CAGradientLayer()
gradient.frame = imageView.bounds
let startColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0.25)
let endColor = UIColor.grayColor()
gradient.colors = [startColor, endColor]
imageView.layer.insertSublayer(gradient, atIndex: 0)