美文网首页
CALayer绘图

CALayer绘图

作者: GeniusLi | 来源:发表于2017-03-16 09:34 被阅读0次

    #ifndef PathTest_FKContext_h

    #define PathTest_FKContext_h

    /*

    该方法负责绘制圆角矩形

    x1、y2:是圆角矩形左上角的座标。

    width、height:控制圆角举行的宽、高

    radius:控制圆角矩形的四个圆角的半径

    */

    void CGContextAddRoundRect(CGContextRef c, CGFloat x1 , CGFloat y1

    , CGFloat width , CGFloat height , CGFloat radius)

    {

    // 移动到左上角

    CGContextMoveToPoint (c, x1 + radius , y1);

    // 添加一条连接到右上角的线段

    CGContextAddLineToPoint(c , x1 + width - radius, y1);

    // 添加一段圆弧

    CGContextAddArcToPoint(c , x1 + width , y1, x1 + width

    , y1 + radius, radius);

    // 添加一条连接到右下角的线段

    CGContextAddLineToPoint(c , x1 + width, y1 + height - radius);

    // 添加一段圆弧

    CGContextAddArcToPoint(c , x1 + width, y1 + height

    , x1 + width - radius , y1 + height , radius);

    // 添加一条连接到左下角的线段

    CGContextAddLineToPoint(c , x1 + radius, y1 + height);

    // 添加一段圆弧

    CGContextAddArcToPoint(c , x1, y1 + height , x1

    , y1 + height - radius , radius);

    // 添加一条连接到左上角的线段

    CGContextAddLineToPoint(c , x1 , y1 + radius);

    // 添加一段圆弧

    CGContextAddArcToPoint(c , x1 , y1 , x1 + radius , y1 , radius);

    }

    /*

    该方法负责绘制多角星。

    n:该参数通常应设为奇数,控制绘制N角星。

    dx、dy:控制N角星的中心。

    size:控制N角星的大小

    */

    void CGContextAddStar(CGContextRef c , NSInteger n

    , CGFloat dx , CGFloat dy , NSInteger size)

    {

    CGFloat dig = 4 * M_PI / n ;

    // 移动到指定点

    CGContextMoveToPoint(c , dx , dy + size);

    for(int i = 1 ; i <= n ; i++)

    {

    CGFloat x = sin(i * dig);

    CGFloat y = cos(i * dig);

    // 绘制从当前点连接到指定点的线条

    CGContextAddLineToPoint(c , x * size + dx ,y * size + dy);

    }

    }

    #endif

    #import "FKViewController.h"

    #import "FKContext.h"

    @implementation FKViewController

    - (void)viewDidLoad

    {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor grayColor];

    //--------------为UIView设置圆角边框--------------

    // 设置该视图控制器所显示的UIView上的CALayer的圆角半径

    self.view.layer.cornerRadius = 8;

    // 设置该视图控制器所显示的UIView上的CALayer的边框宽度

    self.view.layer.borderWidth = 4;

    // 设置该视图控制器所显示的UIView上的CALayer的边框颜色

    self.view.layer.borderColor = [UIColor redColor].CGColor;

    //--------------创建简单的CALayer--------------

    // 创建一个CALayer对象

    CALayer *subLayer = [CALayer layer];

    // 设置subLayer的背景颜色

    subLayer.backgroundColor = [UIColor magentaColor].CGColor;

    // 设置subLayer的圆角半径

    subLayer.cornerRadius = 8;

    // 设置subLayer的边框宽度

    subLayer.borderWidth = 2;

    // 设置subLayer的背景色

    subLayer.borderColor = [UIColor blackColor].CGColor;

    // 设置subLayer的阴影偏移(此处向右下角投下阴影)

    subLayer.shadowOffset = CGSizeMake(4, 5);

    // 设置subLayer的阴影的模糊程度(该属性值越大,阴影越模糊)

    subLayer.shadowRadius = 1;

    // 设置subLayer的阴影的颜色

    subLayer.shadowColor = [UIColor blackColor].CGColor;

    // 设置subLayer的阴影的透明度

    subLayer.shadowOpacity = 0.8;

    // 设置subLayer的大小和位置

    subLayer.frame = CGRectMake(30, 30, 120, 160);

    // 将subLayer添加到该视图控制器所显示的UIView上的CALayer

    [self.view.layer addSublayer:subLayer];

    // 再创建一个CALayer对象

    CALayer *subLayer2 = [CALayer layer];

    // 设置该CALayer的边框、阴影、大小、位置等属性

    subLayer2.cornerRadius = 8;

    subLayer2.borderWidth = 2;

    subLayer2.borderColor = [UIColor blackColor].CGColor;

    subLayer2.shadowOffset = CGSizeMake(4, 5);

    subLayer2.shadowRadius = 1;

    subLayer2.shadowColor = [UIColor blackColor].CGColor;

    subLayer2.shadowOpacity = 0.8;

    subLayer2.masksToBounds = YES;

    subLayer2.frame = CGRectMake(170, 30, 120, 160);

    // 将subLayer2添加到该视图控制器所显示的UIView上的CALayer

    [self.view.layer addSublayer:subLayer2];

    //-------------使用CALayer显示图片--------------

    // 再创建一个CALayer对象

    CALayer *imageLayer = [CALayer layer];

    // 设置该imageLayer显示的图片

    imageLayer.contents = (id)[[UIImage imageNamed:@"android"] CGImage];

    // 设置iamgeLayer的大小和位置。

    imageLayer.frame = subLayer2.bounds;

    // 将imageLayer添加到subLayer2中

    [subLayer2 addSublayer:imageLayer];

    //--------------自定义CALayer的绘制内容--------------

    // 再创建一个CALayer对象

    CALayer *customDrawn = [CALayer layer];

    // 设置CALayer的委托对象,该委托对象负责该CALayer的绘制

    customDrawn.delegate = self;

    customDrawn.backgroundColor = [UIColor greenColor].CGColor;

    customDrawn.frame = CGRectMake(30, 220, 260, 210);

    customDrawn.shadowOffset = CGSizeMake(0, 3);

    customDrawn.shadowRadius = 5.0;

    customDrawn.shadowColor = [UIColor blackColor].CGColor;

    customDrawn.shadowOpacity = 0.8;

    customDrawn.cornerRadius = 10.0;

    customDrawn.borderColor = [UIColor blackColor].CGColor;

    customDrawn.borderWidth = 2.0;

    customDrawn.masksToBounds = YES;

    [self.view.layer addSublayer:customDrawn];

    // 必须有这行,这行才会通知CALayer调用delegate的drawLayer方法

    [customDrawn setNeedsDisplay];

    [super viewDidLoad];

    }

    // 重写该方法为CALayer绘制自定义内容

    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {

    UIColor* bgColor = [UIColor colorWithPatternImage:

    [UIImage imageNamed:@"heart.gif"]];

    // 设置绘图的背景色

    CGContextSetFillColorWithColor(context, bgColor.CGColor);

    // 填充一个椭圆

    CGContextFillEllipseInRect(context, CGRectMake(20 , 20 , 100 , 100));

    CGContextAddRoundRect(context, 160, 20, 100, 60, 5);

    CGContextFillPath(context);

    CGContextSetRGBStrokeColor(context, 1, 1, 0, 1);

    CGContextStrokePath(context);

    CGContextAddStar(context, 5, 140, 150, 60);

    CGContextSetRGBFillColor(context, .5, 0.5, 1, 1);

    CGContextFillPath(context);

    for (int i = 0; i < 10; i++) {

    CGContextBeginPath(context);

    CGContextAddArc(context, i * 25, i * 25, 8 * (i + 1), M_PI * 1.5, M_PI, 0);

    CGContextClosePath(context);

    CGContextSetRGBFillColor(context, 1, 0, 1, (10 -i)* 0.1 );

    CGContextFillPath(context);

    }

    }

    @end

    相关文章

      网友评论

          本文标题:CALayer绘图

          本文链接:https://www.haomeiwen.com/subject/foqouttx.html