关闭

CALayer的autolayout

437人阅读 评论(0) 收藏 举报

autolayout不适用于layer

这里是这么解决的:重写view的layerClass,view使用auto layout,调用view的layoutSubviews重新绘制layer的边界

这里以shape layer为例子

在view.m中如下实现

+(Class)layerClass{
    return [CAShapeLayer class];
}

- (instancetype)init
{
    self = [super init];
    if (self) {
        ((CAShapeLayer *)self.layer).fillColor = [UIColor colorWithRed:0 green:183.0 / 255.0 blue:56.0 / 255.0 alpha:1.0].CGColor;
        ((CAShapeLayer *)self.layer).strokeColor = [UIColor colorWithRed:0 green:183.0 / 255.0 blue:56.0 / 255.0 alpha:1.0].CGColor;
        ((CAShapeLayer *)self.layer).strokeEnd = 0;
    }
    return self;
}
-(void)layoutSubviews{
    [super layoutSubviews];
    
    UIBezierPath *bezierPath = [UIBezierPath bezierPath];
    [bezierPath moveToPoint:CGPointMake(10, CGRectGetHeight(self.bounds) / 2.0)];
    [bezierPath addLineToPoint:CGPointMake(CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) / 2.0)];
    ((CAShapeLayer *)self.layer).path = bezierPath.CGPath;
    
    ((CAShapeLayer *)self.layer).lineWidth = CGRectGetHeight(self.bounds);
    
}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10950次
    • 积分:471
    • 等级:
    • 排名:千里之外
    • 原创:29篇
    • 转载:0篇
    • 译文:9篇
    • 评论:0条
    文章分类