美文网首页
calayer 图层

calayer 图层

作者: ChauvetMa | 来源:发表于2016-08-02 16:48 被阅读54次

    曾经在有道笔记中记载了大量的学习心得笔记,偶然发现周围好多在简书使用的,因此从今以后,我也加入简书这个大家庭,将有道笔记中心得分享给大家。清零心态,与大家共同成长。欢迎大家点评,我叫小马哥!哈哈

    前言

    1:(圆角、阴影、边框、3D形变)

    知识点:CALayer1-简介 - M了个J - 博客园

    哪些需要引入Quartzcore.framework,并#importCALayer、Core Animation、图形上下文

    2.Core Animation是跨平台的(iOS和MAC OS X),也就是说Core Animation可以用于iPhone和MAC台式机的开发,像UIKit框架就不能用于MAC台式机的开发

    (UIKit框架只能应用在iOS而不能用于Mac,但是Quartz 2D是可以跨平台的,因此在使用颜色时,不能直接使用UIColor而需要将颜色转成CGColor)

    上下文中是这样设置颜色的([[UIColor redColor]set];)

    3.每一个UIView都有一个Layer属性

    4.CALayer可以做圆角、阴影、边框、3D形变(包括平移、缩放、旋转)

    5.3D形变属性既可以用形变函数指定,也可以用keyPath指定。区别在于,形变函数不能叠加,keyPath可以叠加。

    举例:先平移、再缩放、再旋转。用形变函数的效果是只进行了旋转。用keyPath可以使得平移、缩放、旋转同时叠加了。

    6.UIView通过CALayer可以使得圆角、阴影、边框、3D形变叠加。

    但是UIImageView通过CALayer,圆角和阴影不可同时运用。

    •UIImageView中不仅一个子图层,因此设置圆角时需要使用setMasksToBounds:YES,让所有子图层跟随边框,不过设置该属性后,无法使用阴影效果•解决办法:可以在底层附加一个UIView实现阴影效果

    7.关于圆角的说明

    若圆角半径等于视图的一半时,那么视图就变成了一个圆

    8.关于形变中的旋转(x,y,z):一般设Z为1,其实设多大都没实际意义。不用设置x,y


    案例1:

    1.UIVIew的layer


    - (void)myViewLayerDemo

    {

          //  自定义UIView的图层属性

          UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 100, 100)];

          [myView setBackgroundColor:[UIColor redColor]];

           [self.view addSubview:myView];

           1) 圆角半径

            myView.layer.cornerRadius = 50.0f;

            2) 阴影

            // 因为Core Animation是跨平台的,基于QuartzCore框架,是因为UIKit框架,仅能适用于iOS平台

            // 在Core Animation中不能使用任何跟UI有关的方法

            // 要设置阴影除了颜色之外,还需要指定其他偏移量和透明度参数

                 1> 阴影颜色

                  [myView.layer setShadowColor:[UIColor lightGrayColor].CGColor];

                  2> 阴影偏移量

                 [myView.layer setShadowOffset:CGSizeMake(0, 10)];

                 3> 阴影的透明度

                 [myView.layer setShadowOpacity:1.0f];

            3) 边框

            [myView.layer setBorderColor:[UIColor whiteColor].CGColor];

            [myView.layer setBorderWidth:3.0f];

    }

    2.UIImageView的layer (这个特殊,圆角和阴影不能同时存在 Label圆角也是需要设定这个)

    - (void)myImageLayerDemo

    {

             UIImage *image = [UIImage imageNamed:@"头像1.png"];

             UIImageView *imageView = [[UIImageView alloc]initWithImage:image];

             [imageView setFrame:CGRectMake(50, 50, 200, 200)];

             [self.view addSubview:imageView];

             // 1. 圆角半径(UIImageView和UILabel都需要)

             // 提示,在imageView中,图层不止一个,如果要实现圆角效果,需要设置一个遮罩属性

             // masksToBounds属性可以让imageView中的所有子图层跟随imageView一起变化

              imageView.layer.cornerRadius = 50.0f;

              [imageView.layer setMasksToBounds:YES];

    // 2. 阴影

    // 提示,如果设置了masksToBounds属性,imageView的阴影效果无效

    [imageView.layer setShadowColor:[UIColor redColor].CGColor];

    [imageView.layer setShadowOffset:CGSizeMake(10.0, 10.0)];

    [imageView.layer setShadowOpacity:1.0];

    // 3. 边框

    [imageView.layer setBorderColor:[UIColor blueColor].CGColor];

    [imageView.layer setBorderWidth:3.0f];

    // 4. 形变属性,在CALayer中的形变属性是3D的,不再是2D的

    // 提示,形变参数使用set方法时,只能应用一种形变

    // 1> 平移属性(向上移动100个点)

    //    [imageView.layer setTransform:CATransform3DMakeTranslation(0, -100, 0)];

    //    // 2> 缩放属性

    //    [imageView.layer setTransform:CATransform3DMakeScale(0.5, 1.0, 1.0)];

    //    // 3> 旋转属性

    //    // 提示:通常在旋转时指定z轴即可,要延哪个轴旋转,指定一个数值1.0即可

    //    // 图像本身没有厚度,如果按照x或y旋转90度,图像是不可见的。

    //    [imageView.layer setTransform:CATransform3DMakeRotation(M_PI_2, 0, 0, 1.0)];

    // 5. 利用keyPath设置形变,可以组合使用,但是记住不要输错

    // 提示,在文档中输入transform3D可以找到对应的transform keyPath

    // 1)平移

    [imageView.layer setValue:@-100 forKeyPath:@"transform.translation.y"];

    // 2) 缩放

    [imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];

    // 3) 旋转

    [imageView.layer setValue:@M_PI_2 forKeyPath:@"transform.rotation.z"];

    }

    相关文章

      网友评论

          本文标题:calayer 图层

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