iOS UIView 为什么绘制的三角形区域未能填充颜色渐变-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

iOS UIView 为什么绘制的三角形区域未能填充颜色渐变

2016-07-27 17:46:35 1996 1
//  YSHHypnosisView.m
//  Hypnosister


#import "YSHHypnosisView.h"

@implementation YSHHypnosisView


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code

    CGRect bounds = self.bounds;
    CGPoint center;

    center.x = bounds.origin.x + bounds.size.width / 2.0;
    center.y = bounds.origin.y + bounds.size.height / 2.0;

    float maxRadius = hypot(bounds.size.width, bounds.size.height) / 2.0;

    UIBezierPath *path = [[UIBezierPath alloc] init];

    for (float currentRadius = maxRadius; currentRadius > 0; currentRadius -= 20) {
        [path moveToPoint:CGPointMake(center.x + currentRadius, center.y)];
        [path addArcWithCenter:center radius:currentRadius startAngle:0.0 endAngle:M_PI * 2.0 clockwise:YES];
    }

    path.lineWidth = 10;
    [[UIColor lightGrayColor] setStroke];

    [path stroke];


    // start...

    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    // 2、绘制渐变
    // 2.1绘制三角形
    UIBezierPath *myPath = [UIBezierPath bezierPath];
    [myPath moveToPoint:CGPointMake(160, 142)];
    [myPath addLineToPoint:CGPointMake(260, 446)];
    [myPath moveToPoint:CGPointMake(260, 446)];
    [myPath addLineToPoint:CGPointMake(60, 446)];
    [myPath moveToPoint:CGPointMake(60, 446)];
    [myPath addLineToPoint:CGPointMake(160, 142)];
    [myPath stroke];

    CGContextSaveGState(currentContext);

    [myPath addClip];

    // 为myPath填充渐变

    // 为什么三角形没有填充渐变?
    CGFloat locations[2] = {0.0, 1.0};
    CGFloat components[8] = {1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0}; // yellow->red

    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorspace, components, locations, 2);

    CGPoint startPoint = CGPointMake(160, 142);
    CGPoint endPoint = CGPointMake(160, 446);
    CGContextDrawLinearGradient(currentContext, gradient, startPoint, endPoint, 0);

    CGGradientRelease(gradient);
    CGColorSpaceRelease(colorspace);

    CGContextRestoreGState(currentContext);



    // 1、绘制阴影
    CGContextSaveGState(currentContext);
    CGContextSetShadow(currentContext, CGSizeMake(4, 7), 2);

    UIImage *logoImage = [UIImage imageNamed:@"logo.png"];
    [logoImage drawInRect:CGRectMake(80, 142, self.window.frame.size.width / 2.0, self.window.frame.size.height / 2.0)]; 

    CGContextRestoreGState(currentContext);

    // end...

}


- (instancetype)initWithFrame:(CGRect)frame  
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
    }

    return self;
}

@end

screenshot

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 20:00:56

    UIBezierPath *myPath = [UIBezierPath bezierPath];
    [myPath moveToPoint:CGPointMake(160, 142)];
    [myPath addLineToPoint:CGPointMake(260, 446)];
    [myPath addLineToPoint:CGPointMake(60, 446)];
    [myPath addLineToPoint:CGPointMake(160, 142)];

    0 0
相关问答

8

回答

短视频SDK如何做到视频原始比例裁剪?

EdgePlus 2017-09-13 17:35:01 39840浏览量 回答数 8

11

回答

iphone设置阿里云邮箱的步骤

minioba 2013-04-24 22:04:37 103814浏览量 回答数 11

38

回答

【hi聊】2019年终回顾:程序员这些年经历最大的变化

问问小秘 2019-12-16 16:46:59 57789浏览量 回答数 38

28

回答

钉钉开放平台“常见问题常见问题常见问题“重要请关注

竹梅 2015-12-03 00:39:14 95853浏览量 回答数 28

1

回答

2020年阿里、字节:一套高效的iOS面试题(二)

montos 2020-04-13 15:08:17 37015浏览量 回答数 1

87

回答

ECS云服务器用户操作帮助指南(官方)

qilu 2014-10-22 12:25:15 43406浏览量 回答数 87

11

回答

如何直接上传文件至OSS,不用服务器中转

cevin 2014-01-06 23:05:39 39171浏览量 回答数 11

3

回答

2020年05月编程排行榜-C语言继2015年,重新成为编程排行榜第一名

huc_逆天 2020-05-06 13:43:42 36718浏览量 回答数 3

58

回答

技术入门问答集锦,涉及多种技术方向,解决新人学习困惑

管理贝贝 2016-08-03 10:13:27 53479浏览量 回答数 58

46

回答

H5技术百问——不懂H5你就OUT啦

yq传送门 2017-09-09 11:03:04 48242浏览量 回答数 46
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载