博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在iOS上实现变换
阅读量:4357 次
发布时间:2019-06-07

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

  形状的绘制没有问题,但我们有时希望能够处理稍微复杂一些的东西,比如旋转或拉伸一个形状。当然可以通过提供不同的坐标来直接创建新的路径,但要求iOS替我们完成旋转通常会更好一些。

  为此,我们使用变换,变换就是变换矩阵的表示,通常可以对内容进行任何形式的变形和操控。

  无论你的代码进行什么样的绘制操作,都会受到道歉转换矩阵(CTM)的影响,它会对每条路径及所执行的绘制操作进行变换。默认情况下,变换矩阵是单位矩阵,也就是说它不做任何工作。但是,可以修改CTM以影响绘制过程。

  要修改CTM,首先要对低级绘制上下文的引用。这个上下文是在调用drawRect(rect:)方法之前由Cocoa为你设置的,它是CGContextRef类型。在iOS上,可以用以下代码获取此上下文:

var context = UIGraphicsGetCurrentContext()

  有了上下文,就可以修改CTM了。在下面的例子中,我们将修改CTM,使绘制出来的所有内容都围绕原点旋转一定的角度。

 说明:如果修改了CTM,这一变化将一直持续到恢复上下文的状态为止。如果只需要旋转部分绘制内容,应当在修改CTM之前保存上下文的状态,在完成旋转之后恢复状态。

代码如下:

//: Playground - noun: a place where people can playimport UIKitclass MyView : UIView{    override func drawRect(rect: CGRect) {        var pathRect = CGRectInset(self.bounds, self.bounds.size.width*0.1, self.bounds.size.height*0.1)        let cornerRadius : CGFloat = 20.0                var rotationTransform = CGAffineTransformMakeRotation(CGFloat(M_PI)/4.0)                var rectanglePath = UIBezierPath(roundedRect: pathRect, cornerRadius: cornerRadius)                var context = UIGraphicsGetCurrentContext()                CGContextSaveGState(context)                CGContextConcatCTM(context, rotationTransform)                UIColor.redColor().setFill()        rectanglePath.fill()                CGContextRestoreGState(context)    }}let viewRect = CGRect(x: 0, y: 0, width: 100, height: 100)let myEmptyView = MyView(frame:viewRect)myEmptyView.backgroundColor = UIColor.clearColor()

  效果图:

转载于:https://www.cnblogs.com/torrescx/p/5364950.html

你可能感兴趣的文章
Android防止按钮连续点击
查看>>
ElasticSearch Mapping中的字段类型
查看>>
数据库中主键和外键的设计原则
查看>>
怎样理解阻塞非阻塞与同步异步的区别?
查看>>
Xcode 警告信息处理:Format string is not a string literal (potentially insecure)
查看>>
关于jQuery表单校验的应用
查看>>
matplotlib----初探------5直方图
查看>>
jquery之ajax
查看>>
Pro Git(中文版)
查看>>
解决phpmyadmin-1800秒超时链接失效问题
查看>>
OpenGL第十一节:拉伸和过滤
查看>>
AlertDialog的onCreateDialog与onPrepareDialog用法
查看>>
swift菜鸟入门视频教程-12-21讲
查看>>
PL/SQL 异常处理程序
查看>>
javascript小白学习指南1---0
查看>>
div:给div加滚动栏 div的滚动栏设置
查看>>
java随机函数使用方法Random
查看>>
链表中环的入口结点
查看>>
凤姐讲学英语
查看>>
ActionBar
查看>>