• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift-绘制背景线条

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Swift - 绘制背景线条

 

效果

 

源码

//
//  BackgroundLineView.swift
//  LineBackgroundView
//
//  Created by YouXianMing on 16/8/14.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

import UIKit

// MARK: Public class : BackgroundLineView

class 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 : LineBackground

private 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 UIKit

class 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)
    }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap