Swift- Core Graphics绘图框架详解2(绘制图形)

1,绘制矩形

原文:Swift - Core Graphics绘图框架详解2(绘制图形)
import UIKit
 
class ViewController : UIViewController {
     
     override func viewDidLoad() {
         super .viewDidLoad()
         
         let frame = CGRect (x: 30, y: 30, width: 250, height: 100)
         let cgView = CGView (frame: frame)
         self .view.addSubview(cgView)
     }
     
     override func didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
}
 
class CGView : UIView {
     
     override init (frame: CGRect ) {
         super . init (frame: frame)
         //设置背景色为透明,否则是黑色背景
         self .backgroundColor = UIColor .clear
     }
     
     required init ?(coder aDecoder: NSCoder ) {
         fatalError( "init(coder:) has not been implemented" )
     }
     
     override func draw(_ rect: CGRect ) {
         super .draw(rect)
         
         //获取绘图上下文
         guard let context = UIGraphicsGetCurrentContext () else {
             return
         }
         
         //创建一个矩形,它的所有边都内缩3点
         let drawingRect = self .bounds.insetBy(dx: 3, dy: 3)
         
         //创建并设置路径
         let path = CGMutablePath ()
         //绘制矩形
         path.addRect(drawingRect)
         
         //添加路径到图形上下文
         context.addPath(path)
         
         //设置笔触颜色
         context.setStrokeColor( UIColor .orange.cgColor)
         //设置笔触宽度
         context.setLineWidth(6)
         //设置填充颜色
         context.setFillColor( UIColor .blue.cgColor)
         
         //绘制路径并填充
         context.drawPath(using: .fillStroke)
     }
}

2,绘制圆角矩形

原文:Swift - Core Graphics绘图框架详解2(绘制图形)
class CGView : UIView {
     
     override init (frame: CGRect ) {
         super . init (frame: frame)
         //设置背景色为透明,否则是黑色背景
         self .backgroundColor = UIColor .clear
     }
     
     required init ?(coder aDecoder: NSCoder ) {
         fatalError( "init(coder:) has not been implemented" )
     }
     
     override func draw(_ rect: CGRect ) {
         super .draw(rect)
         
         //获取绘图上下文
         guard let context = UIGraphicsGetCurrentContext () else {
             return
         }
         
         //创建一个矩形,它的所有边都内缩3点
         let drawingRect = self .bounds.insetBy(dx: 3, dy: 3)
         
         //创建并设置路径
         let path = CGMutablePath ()
         //绘制矩形
         path.addRoundedRect( in : drawingRect, cornerWidth: 10, cornerHeight: 10)
         
         //添加路径到图形上下文
         context.addPath(path)
         
         //设置笔触颜色
         context.setStrokeColor( UIColor .orange.cgColor)
         //设置笔触宽度
         context.setLineWidth(6)
         //设置填充颜色
         context.setFillColor( UIColor .blue.cgColor)
         
         //绘制路径并填充
         context.drawPath(using: .fillStroke)
     }
}

3,绘制圆形

绘制正圆和绘制椭圆都是使用 addEllipse() 方法。如果宽高都一样就是正圆形。
原文:Swift - Core Graphics绘图框架详解2(绘制图形)
class CGView : UIView {
     
     override init (frame: CGRect ) {
         super . init (frame: frame)
         //设置背景色为透明,否则是黑色背景
         self .backgroundColor = UIColor .clear
     }
     
     required init ?(coder aDecoder: NSCoder ) {
         fatalError( "init(coder:) has not been implemented" )
     }
     
     override func draw(_ rect: CGRect ) {
         super .draw(rect)
         
         //获取绘图上下文
         guard let context = UIGraphicsGetCurrentContext () else {
             return
         }
         
         //创建并设置路径
         let path = CGMutablePath ()
         //绘制正圆
         let minWidth = min ( self .bounds.width, self .bounds.height)
         path.addEllipse( in : CGRect (x: 3, y: 3, width: minWidth-6, height: minWidth-6))
         
         //添加路径到图形上下文
         context.addPath(path)
         
         //设置笔触颜色
         context.setStrokeColor( UIColor .orange.cgColor)
         //设置笔触宽度
         context.setLineWidth(6)
         //设置填充颜色
         context.setFillColor( UIColor .blue.cgColor)
         
         //绘制路径并填充
         context.drawPath(using: .fillStroke)
     }
}

4,绘制椭圆

绘制正圆和绘制椭圆都是使用 addEllipse() 方法。如果宽高不一样就是椭圆形。
原文:Swift - Core Graphics绘图框架详解2(绘制图形)
class CGView : UIView {
     
     override init (frame: CGRect ) {
         super . init (frame: frame)
         //设置背景色为透明,否则是黑色背景
         self .backgroundColor = UIColor .clear
     }
     
     required init ?(coder aDecoder: NSCoder ) {
         fatalError( "init(coder:) has not been implemented" )
     }
     
     override func draw(_ rect: CGRect ) {
         super .draw(rect)
         
         //获取绘图上下文
         guard let context = UIGraphicsGetCurrentContext () else {
             return
         }
         
         //创建一个矩形,它的所有边都内缩3点
         let drawingRect = self .bounds.insetBy(dx: 3, dy: 3)
         
         //创建并设置路径
         let path = CGMutablePath ()
         //绘制椭圆
         path.addEllipse( in : drawingRect)
         
         //添加路径到图形上下文
         context.addPath(path)
         
         //设置笔触颜色
         context.setStrokeColor( UIColor .orange.cgColor)
         //设置笔触宽度
         context.setLineWidth(6)
         //设置填充颜色
         context.setFillColor( UIColor .blue.cgColor)
         
         //绘制路径并填充
         context.drawPath(using: .fillStroke)
     }
}

5,复杂图形的绘制

应用中有时会需要绘制一些不规则的图形。我们可以通过多段路径链接,或者多条子路径组合的形式来实现。具体参考我原来写的两篇文章:
原文:Swift - Core Graphics绘图框架详解2(绘制图形)

原文:Swift - Core Graphics绘图框架详解2(绘制图形)

6,设置阴影

给图形设置阴影同给线条添加阴影方法是一样的,这里就不再说明了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值