iOS实践iOS 之路JZ专题

iOS Core Graphics 阴影和渐变效果

2016-04-06  本文已影响1448人  对歌当酒

本文接 iOS UIBezierPath 类绘图,是上文的延伸。

UIImage, UIBezierPathNSString 都提供了至少一种在 drawRect: 绘图的方法,这些方法会在 drawRect: 执行时分别将图像、图形和文本绘制到视图的图层中。

Core Graphics 是一套提供 2D 绘图功能的 C 语言 API. 绘制阴影和渐变效果,需要用 Core Graphics.

例如,下面两段代码效果是相同的:

[[UIColor colorWithRed:1.0 green:0.0 blue:1.0 alpha:1.0] setStroke];

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:a];
[path addLineToPoint:b];

[path stroke];

直接使用 Core Graphics 函数完成:

CGContextSetRGBStrokeColor(currentContext, 1, 0, 0, 1);
    
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, center.x, center.y);
CGPathAddLineToPoint(path, NULL, center.x + 100, center.y + 100);
CGContextAddPath(currentContext, path);
    
CGContextStrokePath(currentContext);
CGPathRelease(path);

效果如图:


阴影效果

示例代码:

CGContextRef currentContext = UIGraphicsGetCurrentContext();

CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(4, 20), 2); 
// 这里的图像会有阴影效果

CGContextRestoreGState(currentContext);
// 这里的图像无阴影效果

效果如下图所示:


渐变效果
CGFloat location[2] = {0.0, 1.0};
CGFloat components[8] = {1.0, 0.0, 0.0, 1.0, //起始颜色为红色
                            1.0, 1.0, 0.0, 1.0}; //终止颜色为黄色
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorspace, components, location, 2);
CGPoint startPoint = ...;
CGPoint endPoint = ...;
CGContextDrawLinearGradient(currentContext, gradient, startPoint, endPoint, 0);

CGGradientRelease(gradient);
CGColorSpaceRelease(colorspace);

PS:CGGradientCreateWithColorComponents 函数的最后一个参数用来设置起始位置和终止位置之外的绘制区域的颜色填充方式。可用 kCGGradientDrawsBeforeStartLocationkCGGradientDrawsAfterEndLocation, 或二者结合使用。

代码地址:
https://github.com/Ranch2014/iOSProgramming4ed/tree/master/04-ViewsAndViewHierarchy/Hypnosister

《iOS编程(第4版)》 笔记

上一篇下一篇

猜你喜欢

热点阅读