美文网首页
iOS核心动画-shadowPath&CGPath

iOS核心动画-shadowPath&CGPath

作者: 沙长健 | 来源:发表于2016-08-06 20:17 被阅读884次

    contentRect
    要如何实现图片的按比例进行分割呢, 下面我给大家介绍一种方法,在CALayer类中,有这样一个属性叫contentRect 这个属性属性允许我们在图层边框里显示寄宿图的一个子域。这涉及到图片是如何显示和拉伸的,所以要比contentsGravity灵活多了.
    boundsframe不同,contentsRect不是按点来计算的,它使用了单位坐标,单位坐标指定在0到1之间,是一个相对值(像素和点就是绝对值)。所以它们是相对与寄宿图的尺寸的。
    默认的contentsRect{0, 0, 1, 1},这意味着整个寄宿图默认都是可见的,如果我们指定一个小一点的矩形,图片就会被裁剪例如contentsRect{0, 0, 0.1, 0.1}就会显示图层的很小一部分.
    下面介绍一下,四个系数的作用(四个系数的范围都是0~1),第一个系数是控制x轴的相对位置, 例如第一个系数是0.5是,就相当于frame层面下的的一半.第二个系数与第一个相同,只不过控制y轴上的相对位置,后两个系数是控制视图的在x轴和y轴上的相对大小(尺寸);
    https://github.com/AttackOnDobby/iOS-Core-Animation-Advanced-Techniques/blob/master/2-寄宿图/2.6.png

    CGPath
    CAShapeLayer可以用来绘制所有能够通过CGPath来表示的形状。这个形状不一定要闭合,图层路径也不一定要不可破,事实上你可以在一个图层上绘制好几个不同的形状。你可以控制一些属性比如lineWith(线宽,用点表示单位),lineCap(线条结尾的样子),和lineJoin(线条之间的结合点的样子);但是在图层层面你只有一次机会设置这些属性。如果你想用不同颜色或风格来绘制多个形状,就不得不为每个形状准备一个图层了
    清单6.1 的代码用一个CAShapeLayer渲染一个简单的火柴人。CAShapeLayer属性是CGPathRef类型,但是我们用UIBezierPath帮助类创建了图层路径,这样我们就不用考虑人工释放CGPath了。图6.1是代码运行的结果。虽然还不是很完美,但是总算知道了大意对吧!

    清单6.1 用CAShapeLayer绘制一个火柴人

    #import "DrawingView.h"
    #import <QuartzCore/QuartzCore.h>
    
    @interface ViewController ()
    
    @property (nonatomic, weak) IBOutlet UIView *containerView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
      [super viewDidLoad];
      //create path
      UIBezierPath *path = [[UIBezierPath alloc] init];
      [path moveToPoint:CGPointMake(175, 100)];
      
      [path addArcWithCenter:CGPointMake(150, 100) radius:25 startAngle:0 endAngle:2*M_PI clockwise:YES];
      [path moveToPoint:CGPointMake(150, 125)];
      [path addLineToPoint:CGPointMake(150, 175)];
      [path addLineToPoint:CGPointMake(125, 225)];
      [path moveToPoint:CGPointMake(150, 175)];
      [path addLineToPoint:CGPointMake(175, 225)];
      [path moveToPoint:CGPointMake(100, 150)];
      [path addLineToPoint:CGPointMake(200, 150)];
      
      //create shape layer
      CAShapeLayer *shapeLayer = [CAShapeLayer layer];
      shapeLayer.strokeColor = [UIColor redColor].CGColor;
      shapeLayer.fillColor = [UIColor clearColor].CGColor;
      shapeLayer.lineWidth = 5;
      shapeLayer.lineJoin = kCALineJoinRound;
      shapeLayer.lineCap = kCALineCapRound;
      shapeLayer.path = path.CGPath;
      //add it to our view
      [self.containerView.layer addSublayer:shapeLayer];
    }
    @end
    

    https://github.com/AttackOnDobby/iOS-Core-Animation-Advanced-Techniques/blob/master/6-专有图层/6.1.png

    相关文章

      网友评论

          本文标题:iOS核心动画-shadowPath&CGPath

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