Swift - Core Graphics绘图框架详解4(绘制图片、图形变换)

一、绘制图像

Core Graphics 也是支持绘制图片图像的,而且 UIKit 中对这个做了封装,方便我们使用。

1,绘制到指定的矩形中

使用这种方式的话图片会自动进行拉伸。如果矩形比例不对,图片会变形。
原文:Swift - Core Graphics绘图框架详解4(绘制图片、图形变换)
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)
         
         //获取图像
         let image = UIImage (named: "image1.jpg" )
         //绘制到指定的矩形中(大小不合适会自动进行拉伸)
         image?.draw( in : self .bounds)
     }
}

2,从指定点开始绘制

这种方式图片尺寸大小、比例都不变,如果显示区域不够的话就会显示不全。
原文:Swift - Core Graphics绘图框架详解4(绘制图片、图形变换)
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)
         
         //获取图像
         let image = UIImage (named: "image1.jpg" )
         //从指定点开始绘制
         image?.draw(at: CGPoint (x: 0, y: 0))
     }
}

二、变换(Transform)的使用

我们除了可以通过对视图 View 进行变换,实现平移旋转缩放操作外。对于绘图上下文,也是可以进行变换的。
原文:Swift - Core Graphics绘图框架详解4(绘制图片、图形变换)
(1)上面样例我们对绘图上下文做平移、缩放、旋转变换操作后,对接下来的所有绘图操作都会起作用。这里是使用图像作为演示,如果绘制其它图形同理。
(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
         }
         
         //保存初始状态
         context.saveGState()
         
         //变换1:向左向下本别平移10点
         context.translateBy(x: 10, y: 10)
         //变换2:缩放成0.1
         context.scaleBy(x: 0.1, y: 0.1)
         //变换3:旋转10度
         context.rotate(by: CGFloat .pi/18)
         
         //获取图像
         let image = UIImage (named: "image1.jpg" )
         //从指定点开始绘制
         image?.draw(at: CGPoint (x: 0, y: 0))
         
         //恢复成初始状态
         context.restoreGState()
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值