iOS 使用使用渐变色生成图片

遇到这样一个场景,需要在一个背景图上盖一张渐变色的蒙层,

本来这个蒙层是直接可以使用- (CAGradientLayer *) 生成的,但是

由于我这里还有一个特殊的需求 ,就是背景图片会拉伸放大,这就需要随着列表的滚动改变 CAGradientLayer 对象的frame, 但是经过调试发现,CAGradientLayer的frame改变和图片的大小改变是有差距的,会有一个时间差,导致底部露出图片的原样,这是不符合需求的,所以,就打算使用渐变色,生成一个图片,然后添加一个透明的imageView 放在背景视图的上面,随着背景视图放大,跟着放大蒙层图片视图,这样蒙层和背景图就完美贴合了

下面直接贴出代码

思路:创建一个透明的空视图,然后创建一个渐变 layer,

将渐变layer. 添加大空视图上,然后通过截图的方式生成一个渐变的蒙层

复制代码
- (CAGradientLayer *)gradientLayerOnBg
{
  if (!_gradientLayerOnBg) {
      _gradientLayerOnBg = [[CAGradientLayer alloc] init];
      _gradientLayerOnBg.frame = CGRectMake(0, 0, AUCommonUIGetScreenWidth(), self.backgroundImgView.height);
      _gradientLayerOnBg.colors = @[(id)[UIColor clearColor].CGColor,(id)[UIColor clearColor].CGColor];
      _gradientLayerOnBg.startPoint = CGPointMake(0, 0);
      _gradientLayerOnBg.endPoint = CGPointMake(0, 1);
      _gradientLayerOnBg.locations = @[@(0),@(01)];
  }
  return _gradientLayerOnBg;
}

- (UIImage *)captureImageView
{
   UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, AUCommonUIGetScreenWidth(), self.headerTemplView.height + AUCommonUIGetStatusBarHeight() + 16)];
   view.backgroundColor = [UIColor clearColor];
   [view.layer addSublayer:self.gradientLayerOnBg];
   UIGraphicsBeginImageContext(view.bounds.size);
   [view.layer renderInContext:UIGraphicsGetCurrentContext()];
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return image;
}
相关推荐
SameX20 小时前
独立开发了一款健康记录 App,聊聊几个让我纠结很久的设计决策
ios
报错小能手21 小时前
Swift UI 框架 实战 简易计数器、待办清单 、随机壁纸图库、个人笔记
ui·ios
游戏开发爱好者81 天前
深入理解iOSTime Profiler:提升iOS应用性能的关键工具
android·ios·小程序·https·uni-app·iphone·webview
for_ever_love__2 天前
UI学习:多界面传值的正向传值(属性传值)和反向传值(代理传值)
学习·ui·ios·objective-c
开心就好20252 天前
全面介绍iOS开发工具:Xcode、AppCode、CocoaPods、Fastlane和Git
后端·ios
懋学的前端攻城狮2 天前
数据持久化与缓存策略:在离线与在线间架起桥梁
ios·swift
~央千澈~2 天前
以cocos3.8.8开发的游戏为例商业实战项目举例cocos打包ios苹果安装包ipa完整详细教程-优雅草卓伊凡
ios
SameX2 天前
iOS 足迹 App 的成就系统,我推倒重做了一次——踩了3个坑之后
ios
SameX2 天前
我做了一个把专注计时变成「声音护照」的 iOS App,聊聊数据可视化和成长系统的设计思路
ios
SameX2 天前
我用 SpriteKit 给存钱罐装了个物理引擎
ios