zoukankan      html  css  js  c++  java
  • CALayer简单使用

    1.简单地添加一个layer视图

      
        self.movableCircleLayer = [CALayer layer];
        
        /// 指定大小
        self.movableCircleLayer.bounds = CGRectMake(0, 0, kLayerWidth, kLayerWidth);
        
        /// 指定中心点
        self.movableCircleLayer.position = CGPointMake(self.view.center.x, 100);
        /// 圆形
        self.movableCircleLayer.cornerRadius = kLayerWidth / 2;
        /// 背景色
        self.movableCircleLayer.backgroundColor =  [UIColor greenColor].CGColor;
        
        /// 设置阴影
        self.movableCircleLayer.shadowColor = [UIColor grayColor].CGColor;
        self.movableCircleLayer.shadowOffset = CGSizeMake(3, 3);
        self.movableCircleLayer.shadowOpacity = 0.8;
        [self.view.layer addSublayer:self.movableCircleLayer];
        
    

     2,使用图层添加一张图片

    /// 图层上添加图片
    -(void)drawImageWithContent{
        CALayer * layer = [CALayer layer];
        layer.bounds = CGRectMake(0,0,kPhotoWidth,kPhotoWidth);
        layer.position = self.view.center;
        layer.cornerRadius = kPhotoWidth / 2;
        
        layer.masksToBounds = YES;
        layer.borderColor = [UIColor whiteColor].CGColor;
        layer.borderWidth = 1;
        
        // 如果只是显示图片,不做其它处理,直接设置contents就可以了,也就不会出现
        // 绘图和图像倒立的问题了
        layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"hahaha.jpg"].CGImage);
        [self.view.layer addSublayer:layer];
        
    }
    

     3、使用图层代理添加一个有阴影的图片

    /// 通过层代理绘制图片
    
    -(void)drawImage{
        CALayer * layer = [CALayer layer];
        layer.bounds = CGRectMake(0, 0, kPhotoWidth, kPhotoWidth);
        layer.position = CGPointMake(self.view.center.x, self.view.bounds.size.height-100);
        layer.cornerRadius = kPhotoWidth/2;
        
        layer.masksToBounds = YES;
        layer.borderColor = [UIColor whiteColor].CGColor;
        layer.borderWidth = 1;
        
        layer.delegate = self;
        
        /// 添加到父视图图层上
        [self.view.layer addSublayer:layer];
        
        // 当设置masksToBounds为YES后,要想要阴影效果,就需要额外添加一个图层作为阴影图层了
        CALayer * subLayer = [CALayer layer];
        subLayer.position = layer.position;
        subLayer.bounds = layer.bounds;
        subLayer.cornerRadius = layer.cornerRadius;
        subLayer.shadowOpacity = 1.0;
        subLayer.shadowColor = [UIColor redColor].CGColor;
        subLayer.shadowOffset = CGSizeMake(2, 1);
        subLayer.borderWidth = layer.borderWidth;
        subLayer.borderColor = [UIColor whiteColor].CGColor;
        [self.view.layer insertSublayer:subLayer above:layer];
        
        /// 调用此方法,否则代理不会调用
        [layer setNeedsDisplay];
        
    }
    
    /// 代理方法
    -(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
    {
        /// 将当前上下文入zhan
        CGContextSaveGState(ctx);
        
        // 注意:坐标系统与UIView的不同,这里使用的是笛卡尔积坐标系,也就是左下角为(0,0)
        // 所以,我们只要记住这点就可以很容易地变换了。
        
        // 处理图片倒立的问题
        // 默认呈现是倒立的,因此需要将形变矩阵的sy设置为-1就成了正立的了
        // 先缩放后平移也可以
         CGContextScaleCTM(ctx, 1, -1);
         CGContextTranslateCTM(ctx, 0, -kPhotoWidth);
        
        
    //    /// 平移后水平旋转
    //
    //    CGContextTranslateCTM(ctx, kPhotoWidth, kPhotoWidth);
    //    CGContextRotateCTM(ctx, 3.1415926 / 180 *180);
        UIImage * imgage = [UIImage imageNamed:@"hahaha.jpg"];
        CGContextDrawImage(ctx, CGRectMake(0, 0, kPhotoWidth, kPhotoWidth), imgage.CGImage);
        /// 任务已完成,将上下文退栈
        CGContextRestoreGState(ctx);
    }
    
  • 相关阅读:
    每日英语:AntiJapan Protests Flare in China
    opencv CvMat矩阵学习
    warning C4018有符号无符号不匹配
    每日英语:Relationship Repair: 10 Tips for Thinking Like a Therapist
    结构体数组定义和引用
    每日英语:China's Conflicted Consumers
    一个托盘程序, 简化notifyicon的使用.
    nunit notes from TDD in .net
    一款能拖拉的winform树形控件
    vss 2005 internet visit
  • 原文地址:https://www.cnblogs.com/angongIT/p/5445598.html
Copyright © 2011-2022 走看看