网上的常见的画虚线方法~

来源:互联网 发布:java免费书籍下载txt 编辑:程序博客网 时间:2024/04/30 16:48

        CAShapeLayer *shapeLayer = [CAShapeLayerlayer];

        [shapeLayer setBounds:self.firstView.frame];

        [shapeLayer setPosition:self.firstView.center];

        [shapeLayer setFillColor:[UIColorclearColor].CGColor];

        // 设置虚线颜色为blackColor

        [shapeLayer setStrokeColor:[kRTColorWithHEX(0xd9d9d7,1) CGColor]];

        // 3.0f设置虚线的宽度

        [shapeLayer setLineJoin:kCALineJoinRound];

        [shapeLayer setLineWidth:1.f];

        // 3=线的宽度 1=每条线的间距

        [shapeLayer setLineDashPattern:[NSArrayarrayWithObjects:[NSNumbernumberWithInt:4],

                                        [NSNumbernumberWithInt:3],nil]];

        CGMutablePathRef path =CGPathCreateMutable();

        CGPathMoveToPoint(path,NULL, 10,44*i);

        CGPathAddLineToPoint(path,NULL, self.firstView.frame.size.width-11,44*i);

        [shapeLayer setPath:path];

        CGPathRelease(path);

        [self.firstView.layeraddSublayer:shapeLayer];


技巧,如果在viewDidLoad里调用这段代码,会导致self.firstView.frame或者self.firstView.bounds里获取错误,所以放在viewDidappear里调用,但是界面切换的效果,会变成didAppear后突然出现虚线,这种效果不好.所以最后放倒了viewWillAppear里面调用,但是self.firstView.bounds获取值依然不正确,最后只能调用gcd在dispatch_get_main让该方法在界面布局完成后调用。这样self.firstView.bounds和self.firstView.frame的值就是正确的了。 如果重写需要画虚线的view 然后把方法放在dractRect 或者 awakenib里面不知道在viewDidLoad或viewWillAppear里面会怎么样~~

0 0