本文主要是介绍利用CAShapeLayer在文字上画虚线(UILable举例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天看到朋友有个需求,是要在lab的文字下画虚线,感觉很有意思就用CAShapeLayer研究了下,来一起看看吧。
老样子直奔主题上代码:
//
// ViewController.m
// DottedLineDemo
//
// Created by a111 on 16/3/16.
// Copyright © 2016年 司小文. All rights reserved.
//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor blackColor];[self makeDottedLine];// Do any additional setup after loading the view, typically from a nib.
}#pragma mark 制作虚线
- (void)makeDottedLine{//labNSString *str = @"司小文的博客:http://blog.csdn.net/siwen1990";float strFont = 14.;CGRect labRect = [str boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:strFont]} context:nil];UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake((self.view.frame.size.width-labRect.size.width)/2, 100, labRect.size.width,labRect.size.height)];lab.textColor = [UIColor whiteColor];lab.text = str;lab.font = [UIFont systemFontOfSize:strFont];[self.view addSubview:lab];//layerCAShapeLayer *shapeLayer = [CAShapeLayer layer];[shapeLayer setBounds:lab.bounds];[shapeLayer setPosition:lab.center];[shapeLayer setFillColor:[[UIColor redColor] CGColor]];//设置虚线的颜色 - 颜色请必须设置[shapeLayer setStrokeColor:[[UIColor whiteColor] CGColor]];//设置虚线的高度[shapeLayer setLineWidth:1.0f];//设置类型[shapeLayer setLineJoin:kCALineJoinRound];/*10.f=每条虚线的长度3.f=每两条线的之间的间距*/[shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:10.f],[NSNumber numberWithInt:3.f],nil]];// Setup the pathCGMutablePathRef path1 = CGPathCreateMutable();/*代表初始坐标的x,yx:写-2,是为了视觉上,虚线比文字稍长一点。y:要和下面的y一样。*/CGPathMoveToPoint(path1, NULL,-2, lab.frame.size.height);/*代表坐标的x,ylab.frame.size.width+2:我觉得他代表的意思可以理解为线的长度。lab.frame.size.height:要与上面的y大小一样,才能使平行的线,不然会画出斜线呦~*/CGPathAddLineToPoint(path1, NULL, lab.frame.size.width+2,lab.frame.size.height);//赋值给shapeLayer[shapeLayer setPath:path1];//清除CGPathRelease(path1);//可以把self改成任何你想要的UIView.[[self.view layer] addSublayer:shapeLayer];}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end
效果图:
注释写的很清楚但是demo还是要奉上的:
CAShapeLayer画虚线-司小文 (提取码:e684)
感谢观看,学以致用更感谢。
这篇关于利用CAShapeLayer在文字上画虚线(UILable举例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!