iOS 绘制虚线的三种方法
2016-11-04 11:47
260 查看
总结了三种绘制虚线的方法:
方法一:通过Quartz 2D 在 UIView drawRect:方法进行绘制虚线
方法二:通过 Quartz 2D 在 UIImageView 绘制虚线
方法三:通过CAShapeLayer 方式绘制虚线
方法一:通过Quartz 2D 在 UIView drawRect:方法进行绘制虚线
- (void)drawRect:(CGRect)rect { // 可以通过 setNeedsDisplay 方法调用 drawRect: // Drawing code CGContextRef context =UIGraphicsGetCurrentContext(); // 设置线条的样式 CGContextSetLineCap(context, kCGLineCapRound); // 绘制线的宽度 CGContextSetLineWidth(context, 3.0); // 线的颜色 CGContextSetStrokeColorWithColor(context, [UIColor orangeColor].CGColor); // 开始绘制 CGContextBeginPath(context); // 设置虚线绘制起点 CGContextMoveToPoint(context, 10.0, 20.0); // lengths的值{10,10}表示先绘制10个点,再跳过10个点,如此反复 CGFloat lengths[] = {10,10}; // 虚线的起始点 CGContextSetLineDash(context, 0, lengths,2); // 绘制虚线的终点 CGContextAddLineToPoint(context, 310.0,20.0); // 绘制 CGContextStrokePath(context); // 关闭图像 CGContextClosePath(context); }
方法二:通过 Quartz 2D 在 UIImageView 绘制虚线
/** * 通过 Quartz 2D 在 UIImageView 绘制虚线 * * param imageView 传入要绘制成虚线的imageView * return */ - (UIImage *)drawLineOfDashByImageView:(UIImageView *)imageView { // 开始划线 划线的frame UIGraphicsBeginImageContext(imageView.frame.size); [imageView.image drawInRect:CGRectMake(0, 0, imageView.frame.size.width, imageView.frame.size.height)]; // 获取上下文 CGContextRef line = UIGraphicsGetCurrentContext(); // 设置线条终点的形状 CGContextSetLineCap(line, kCGLineCapRound); // 设置虚线的长度 和 间距 CGFloat lengths[] = {5,5}; CGContextSetStrokeColorWithColor(line, [UIColor greenColor].CGColor); // 开始绘制虚线 CGContextSetLineDash(line, 0, lengths, 2); CGContextMoveToPoint(line, 0.0, 2.0); CGContextAddLineToPoint(line, 300, 2.0); CGContextStrokePath(line); // UIGraphicsGetImageFromCurrentImageContext()返回的就是image return UIGraphicsGetImageFromCurrentImageContext(); }
方法三:通过CAShapeLayer 方式绘制虚线
/** * 通过 CAShapeLayer 方式绘制虚线 * * param lineView: 需要绘制成虚线的view * param lineLength: 虚线的宽度 * param lineSpacing: 虚线的间距 * param lineColor: 虚线的颜色 * param lineDirection 虚线的方向 YES 为水平方向, NO 为垂直方向 **/ - (void)drawLineOfDashByCAShapeLayer:(UIView *)lineView lineLength:(int)lineLength lineSpacing:(int)lineSpacing lineColor:(UIColor *)lineColor lineDirection:(BOOL)isHorizonal { CAShapeLayer *shapeLayer = [CAShapeLayer layer]; [shapeLayer setBounds:lineView.bounds]; if (isHorizonal) { [shapeLayer setPosition:CGPointMake(CGRectGetWidth(lineView.frame) / 2, CGRectGetHeight(lineView.frame))]; } else{ [shapeLayer setPosition:CGPointMake(CGRectGetWidth(lineView.frame) / 2, CGRectGetHeight(lineView.frame)/2)]; } [shapeLayer setFillColor:[UIColor clearColor].CGColor]; // 设置虚线颜色为blackColor [shapeLayer setStrokeColor:lineColor.CGColor]; // 设置虚线宽度 if (isHorizonal) { [shapeLayer setLineWidth:CGRectGetHeight(lineView.frame)]; } else { [shapeLayer setLineWidth:CGRectGetWidth(lineView.frame)]; } [shapeLayer setLineJoin:kCALineJoinRound]; // 设置线宽,线间距 [shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:lineLength], [NSNumber numberWithInt:lineSpacing], nil]]; // 设置路径 CGMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, NULL, 0, 0); if (isHorizonal) { CGPathAddLineToPoint(path, NULL,CGRectGetWidth(lineView.frame), 0); } else { CGPathAddLineToPoint(path, NULL, 0, CGRectGetHeight(lineView.frame)); } [shapeLayer setPath:path]; CGPathRelease(path); // 把绘制好的虚线添加上来 [lineView.layer addSublayer:shapeLayer]; }
相关文章推荐
- iOS 绘制虚线的三种方法
- [iOS 绘制虚线] 转: iOS 绘制虚线的三种方法
- iOS绘制虚线方法
- iOS绘制虚线方法
- IOS绘制虚线的方法总结
- iOS绘制虚线方法【原创】
- IOS绘制虚线的方法,可以给cell设置虚线分割线
- iOS 图片拉伸的三种方法
- iOS三种Json方法解析国家气象局API
- IOS三种随机数方法
- iOS 设备唯一 ID 的三种替代方法之一
- ios开发-三种随机数方法
- ios 有如下三种随机数方法
- 一个绘制虚线的非常规函数(常规方法,打印机上绘制不出虚线)
- ios绘制虚线
- ios 拨打电话 三种方法
- iOS 开发之Resize UIimage的三种方法
- iOS三种Json方法解析国家气象局API
- 三种方法绘制矩形 源代码
- photoshop绘制虚线方法介绍