视图背景颜色渐变的两种实现方式
来源:互联网 发布:大学生网络安全意识 编辑:程序博客网 时间:2024/05/29 16:53
- 使用layer方式实现
//初始化视图 self.comfirmButton.frame = CGRectMake(139, 0, self.width - 139, self.height); //初始化CAGradientlayer对象,使它的大小为对象的大小 CAGradientLayer *layer = [CAGradientLayer layer]; layer.frame = self.comfirmButton.bounds; //将layer对象添加到视图 [self.comfirmButton.layer addSublayer:layer]; //渐变区域的起始点 layer.startPoint = CGPointMake(0, 0); //渐变区域的终点 layer.endPoint = CGPointMake(1, 0); //颜色数组 layer.colors = @[(__bridge id)[UIColor colorWithHexString:@"FF7171"].CGColor,(__bridge id)[UIColor colorWithHexString:@"FF71A1"].CGColor]; //设置颜色的分割点 layer.locations = @[@(0.5f),@(1.0f)];
使用上下文的方式实现
.h中的方法
类目
typedef enum { topToBottom = 0,//从上到小 leftToRight = 1,//从左到右 upleftTolowRight = 2,//左上到右下 uprightTolowLeft = 3,//右上到左下}GradientType;
+ (UIButton *)changeButtonTitleAndImagePointWith:(UIButton *)button
外部方法
+ (UIButton *)changeButtonTitleAndImagePointWith:(UIButton *)button{ CGFloat imageW = button.imageView.frame.size.width; CGFloat imageH = button.imageView.frame.size.height; CGFloat titleW = button.titleLabel.frame.size.width; CGFloat titleH = button.titleLabel.frame.size.height; //图片上文字下 [button setTitleEdgeInsets:UIEdgeInsetsMake(0, -imageW, imageH + 10, 0.f)]; [button setImageEdgeInsets:UIEdgeInsetsMake(titleH, 0.f, 0.f,-titleW)]; return button;}
私有方法
+ (UIButton *)changeColorArray:(NSMutableArray*)colorArray ByGradientType:(GradientType)gradientType button:(UIButton *)button{ UIImage *backImage = [button buttonImageFromColors:colorArray ByGradientType:gradientType button:button]; [button setBackgroundImage:backImage forState:UIControlStateNormal]; return button;}- (UIImage*) buttonImageFromColors:(NSArray*)colors ByGradientType:(GradientType)gradientType button:(UIButton *)button{ NSMutableArray *ar = [NSMutableArray array]; for(UIColor *c in colors) { [ar addObject:(id)c.CGColor]; } UIGraphicsBeginImageContextWithOptions(button.frame.size, YES, 1); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSaveGState(context); CGColorSpaceRef colorSpace = CGColorGetColorSpace([[colors lastObject] CGColor]); CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)ar, NULL); CGPoint start; CGPoint end; switch (gradientType) { case 0:////从上到小 start = CGPointMake(0.0, 0.0); end = CGPointMake(0.0, button.frame.size.height); break; case 1:////从左到右 start = CGPointMake(0.0, 0.0); end = CGPointMake(button.frame.size.width, 0.0); break; case 2:////左上到右下 start = CGPointMake(0.0, 0.0); end = CGPointMake(button.frame.size.width, button.frame.size.height); break; case 3: ////右上到左下 start = CGPointMake(button.frame.size.width, 0.0); end = CGPointMake(0.0, button.frame.size.height); break; default: break; } CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); CGGradientRelease(gradient); CGContextRestoreGState(context); CGColorSpaceRelease(colorSpace); UIGraphicsEndImageContext(); return image;}
简书地址
阅读全文
0 0
- 视图背景颜色渐变的两种实现方式
- iOS 实现背景颜色渐变的方式
- 背景实现颜色渐变
- VC 实现视图区背景颜色渐变填充
- 实现背景颜色的渐变效果
- CAGradientLayer 实现背景颜色的渐变
- 背景颜色的渐变
- CSS3实现背景颜色渐变
- CSS3实现背景颜色渐变
- 实现UIView背景颜色渐变
- 视图背景颜色渐变、画圆、动画
- 实现背景颜色的渐变效果(code project)
- css3实现背景颜色线性渐变
- css3实现背景颜色线性渐变
- CSS实现DIV层背景颜色渐变
- 如何使用css实现背景颜色渐变
- ios开发实现UIView背景颜色渐变
- CSS3实现背景颜色渐变 摘抄
- 六个案例,带你感受新零售服务市场的潜力
- Android内存优化(使用SparseArray和ArrayMap代替HashMap)
- (POJ
- 利用List接口的实现类ArrayList编写一个随机点名器
- Linux功耗管理(1)_整体架构
- 视图背景颜色渐变的两种实现方式
- BAT脚本编写教程入门提高篇
- UVA
- qt内qstring,int,char,qbytearray互相转化
- Servlet接口继承图解
- 解决IIS7多域名绑定同一物理目录,设置不同的默认文档的问题
- 数据结构实验:连通分量个数
- ubuntu16.04 修改mysql编码
- SpringBoot之Servlet(C)