博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - 绘制背景线条
阅读量:6457 次
发布时间:2019-06-23

本文共 5196 字,大约阅读时间需要 17 分钟。

Swift - 绘制背景线条

 

效果

 

源码

////  BackgroundLineView.swift//  LineBackgroundView////  Created by YouXianMing on 16/8/14.//  Copyright © 2016年 YouXianMing. All rights reserved.//import UIKit// MARK: Public class : BackgroundLineViewclass BackgroundLineView: UIView {    // MARK: Properties.        /// Line width, default is 5.    var lineWidth : CGFloat {            get {
return backgroundView.lineWidth} set(newVal) { backgroundView.lineWidth = newVal backgroundView.setNeedsDisplay() } } /// Line gap, default is 3. var lineGap : CGFloat { get {
return backgroundView.lineGap} set(newVal) { backgroundView.lineGap = newVal backgroundView.setNeedsDisplay() } } /// Line color, default is grayColor. var lineColor : UIColor { get {
return backgroundView.lineColor} set(newVal) { backgroundView.lineColor = newVal backgroundView.setNeedsDisplay() } } /// Rotate value, default is 0. var rotate : CGFloat { get {
return backgroundView.rotate} set(newVal) { backgroundView.rotate = newVal backgroundView.setNeedsDisplay() } } convenience init(frame: CGRect, lineWidth : CGFloat, lineGap : CGFloat, lineColor : UIColor, rotate : CGFloat) { self.init(frame : frame) self.lineWidth = lineWidth self.lineGap = lineGap self.lineColor = lineColor self.rotate = rotate } // MARK: Override system method. override func layoutSubviews() { super.layoutSubviews() setupBackgroundView() } override init(frame: CGRect) { super.init(frame: frame) self.layer.masksToBounds = true self.addSubview(backgroundView) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: Private value & func. private let backgroundView = LineBackground(length: 0) private func setupBackgroundView() { let drawLength = sqrt(self.bounds.size.width * self.bounds.size.width + self.bounds.size.height * self.bounds.size.height) backgroundView.frame = CGRectMake(0, 0, drawLength, drawLength) backgroundView.center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.height / 2.0) backgroundView.setNeedsDisplay() }}// MARK: Private class : LineBackgroundprivate class LineBackground : UIView { private var rotate : CGFloat = 0 private var lineWidth : CGFloat = 5 private var lineGap : CGFloat = 3 private var lineColor : UIColor = UIColor.grayColor() override init(frame: CGRect) { super.init(frame: frame) self.backgroundColor = UIColor.clearColor() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } convenience init(length : CGFloat) { self.init(frame : CGRectMake(0, 0, length, length)) } override func drawRect(rect: CGRect) { super.drawRect(rect) if self.bounds.size.width <= 0 || self.bounds.size.height <= 0 { return } let context = UIGraphicsGetCurrentContext() let width = self.bounds.size.width let height = self.bounds.size.width let drawLength = sqrt(width * width + height * height) let outerX = (drawLength - width) / 2.0 let outerY = (drawLength - height) / 2.0 let tmpLineWidth = lineWidth <= 0 ? 5 : lineWidth let tmpLineGap = lineGap <= 0 ? 3 : lineGap var red : CGFloat = 0 var green : CGFloat = 0 var blue : CGFloat = 0 var alpha : CGFloat = 0 CGContextTranslateCTM(context, 0.5 * drawLength, 0.5 * drawLength) CGContextRotateCTM(context, rotate) CGContextTranslateCTM(context, -0.5 * drawLength, -0.5 * drawLength) lineColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha) CGContextSetRGBFillColor(context, red, green, blue, alpha) var currentX = -outerX while currentX < drawLength { CGContextAddRect(context, CGRectMake(currentX, -outerY, tmpLineWidth, drawLength)) currentX += tmpLineWidth + tmpLineGap } CGContextFillPath(context) }}

 

使用

////  ViewController.swift//  LineBackgroundView////  Created by YouXianMing on 16/8/14.//  Copyright © 2016年 YouXianMing. All rights reserved.//import UIKitclass ViewController: UIViewController {    let tmpView = BackgroundLineView(frame: CGRectMake(0, 0, 300, 300), lineWidth: 4, lineGap: 4,                                     lineColor: UIColor.blackColor().colorWithAlphaComponent(0.045), rotate: CGFloat(M_PI_4))        override func viewDidLoad() {                super.viewDidLoad()        tmpView.center = self.view.center        self.view.addSubview(tmpView)    }}

 

转载地址:http://afizo.baihongyu.com/

你可能感兴趣的文章
福大软工1816 · 第三次作业 - 结对项目1
查看>>
selenium多个窗口切换
查看>>
《单页面应用》所获知识点
查看>>
静态库 调试版本 和发布版本
查看>>
DB2 错误码解析
查看>>
读书笔记四
查看>>
JAVA中的finalize()方法
查看>>
慕课网学习手记--炫丽的倒计时效果Canvas绘图与动画基础
查看>>
==与equals()的区别
查看>>
TCP三次握手四次挥手相关问题探讨
查看>>
基本分类方法——KNN(K近邻)算法
查看>>
在XenCenter6.2中构建CentOS7虚拟机的启动错误
查看>>
.NET Framework3.0/3.5/4.0/4.5新增功能摘要
查看>>
php中表单提交复选框与下拉列表项
查看>>
熟悉常用的Linux操作
查看>>
WordPress 前端投稿/编辑发表文章插件 DJD Site Post(支持游客和已注册用户)汉化版 免费下载...
查看>>
C# 自定义事件整理项目 - EventDemo
查看>>
几何面积体积_2
查看>>
面象过程与面象对象
查看>>
用CSS实现图片水印效果代码
查看>>