CGAffineTransform

这个是CoreGraphics框架中的CGAffineTransform类,可用于设定UIView的transform属性。控制视图的缩放、旋转和平移操作。另称仿射变换矩阵。

Quartz转换实现原理:Quartz把绘图分为两个部分,用户空间(和设备无关),设备空间。用户空间和设备空间中存在一个转换矩阵CTM。

1 CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) 平移:设置平移量

CGContextTranslateCTM (myContext, 100, 50);//直接通过修改当前CTM实现

2 CGAffineTransformMakeScale(CGFloat sx, CGFloat sy) 缩放:设置缩放比例,仅通过设置缩放比例就可以实现视图扑面而来和锁紧屏幕的效果。

CGContextScaleCTM (myContext, .5, .75);//直接通过修改当前CTM实现

3 CGAffineTransformMakeRotation(CGFloat angle) 旋转:设置旋转角度

CGContextRotateCTM (myContext, radians(–45.));//直接通过修改当前CTM实现

以上三个都是针对视图的原定最初位置的中心点为起始参照进行相应操作的,在操作结束之后可对设置进行还原。

view.transform = CGAffineTransformIdentity;//线性代数里面讲的矩阵变换,这个是恒等变换,当改变过一个view.transform属性或者view.layer.transform的时候需要回复默认状态的话,记得先把他们重置可以使用。或者view.layer.tranform = CATransform3DIdentity.

注意:如果一直不断改变一个view.transform的属性,而每次改变之前没有重置的话,会发现后来的改变和你想要的发生变化了,不是你真正想要的结果。

另外还可以通过CGAffineTransformTranslate等方法对现有的transform进行进一步处理。

使用:

#import "CoreGraphics.h"

CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI_2);

[XXX setTransform:rotation];

//同CGAffineTransformRotate(transform, M_PI_2);

#define M_E         2.71828182845904523536028747135266250   e

?#define M_LOG2E     1.44269504088896340735992468100189214   log 2e

?#define M_LOG10E    0.434294481903251827651128918916605082  log 10e

?#define M_LN2       0.693147180559945309417232121458176568  log e2?

#define M_LN10      2.30258509299404568401799145468436421   log e10?

#define M_PI        3.14159265358979323846264338327950288   pi

?#define M_PI_2      1.57079632679489661923132169163975144   pi/2

?#define M_PI_4      0.785398163397448309615660845819875721  pi/4?

#define M_1_PI      0.318309886183790671537767526745028724  1/pi?

#define M_2_PI      0.636619772367581343075535053490057448  2/pi?

#define M_2_SQRTPI  1.12837916709551257389615890312154517   2/sqrt(pi)?

#define M_SQRT2     1.41421356237309504880168872420969808   sqrt(2)?

#define M_SQRT1_2   0.707106781186547524400844362104849039  1/sqrt(2)

 

4 反转效果 CGAffineTransformInvert(CGAffineTransform t);

5 只对局部产生效果 CGRectApplyAffineTransform(CGRect rect,CGAffineTransform t);

6 判断两个仿射变换是否相等 CGAffineTransformEqualToTransform(CGAffineTransform t1,CGAffineTransform t2);

7 获取仿射变换 CGContextGetUserSpaceToDeviceSpaceTransform(CGContextRef c);

下面的函数只起到查看的效果,比如看一下这个用户空间的点,转换到设备空间去坐标是多少
CGPoint CGContextConvertPointToDeviceSpace (
   CGContextRef c,
   CGPoint point
);
 
CGPoint CGContextConvertPointToUserSpace (
   CGContextRef c,
   CGPoint point
);
 
CGSize CGContextConvertSizeToDeviceSpace (
   CGContextRef c,
   CGSize size
);
 
CGSize CGContextConvertSizeToUserSpace (
   CGContextRef c,
   CGSize size
);
 
CGRect CGContextConvertRectToDeviceSpace (
   CGContextRef c,
   CGRect rect
);
 
CGRect CGContextConvertRectToUserSpace (
   CGContextRef c,
   CGRect rect
);
 原文 http://donbe.blog.163.com/blog/static/138048021201061054243442/

时间: 2024-12-22 15:38:02

CGAffineTransform的相关文章

iOS下的2D仿射变换机制(CGAffineTransform相关)

仿射变换简介 仿射变换源于CoreGraphics框架,主要作用是绘制2D级别的图层,几乎所有iOS设备屏幕上的界面元素都是由CoreGraphics来负责绘制.而我们要了解的2D仿射变换是其下负责二维坐标到二维坐标的线性变换工作,它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线,圆弧经过变换之后依然是圆弧)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变),只有依照向量产生的二维线条间的夹角会可能发生变化.仿射变换包括:平移(Tra

ios UItableView,UITableViewHeaderFooterView分组头部的重用机制,简单地仿射变换CGAffineTransform

怎样设置包括第一栏在内相同高度的section(小技巧,虽然容易但容易忽略) *第一步,在viewdidload里将尾部设为0,table.sectionFooterHeight = 0;(代理方法)- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0; }虽然也可以设置尾部高度,但是设置后没有效果 第二步,调用tableView的代理方法- (CGF

CGAffineTransform相关函数

CoreGraphics.h CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI_2);?[xxx setTransform:rotation];记录一些常量,以后用的着!#define M_E         2.71828182845904523536028747135266250   e?#define M_LOG2E     1.44269504088896340735992468100189214   log

iOS 开发----CGAffineTransform平移,旋转,缩放

在做平移,旋转,缩放的时候一定要记住三个步骤: 获取值(获取当前控件的 transform 属性值) 修改值(修改需要设置的 transform 属性值) 赋值   (将修改的 transform 属性的值赋给原来的值) /**   *  平移   *   *  @param transform 获取当前的形变 transform   *  @param tx        沿着 x 水平方向的平移   *  @param ty        沿着 y 垂直方向的平移   *   *  @ret

iOS基础CGAffineTransform的简单使用

CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0.0 这里附上的CGAffineTransform官方文档: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTransform/index.html transform 是

iOS 混合变换旋转 CGAffineTransform 的使用

在ios 中, Core Graphics 提供了一系列的函数可以在一个变换的基础上做深层次的变换,如果做一个既要缩放又要旋转的变换,以下的方法比较实用. CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) --放大缩小 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle) --旋转的角度 CGAffineTransformTranslate(CG

CGAffineTransform 放射变换

矩阵乘法 A B相乘要A的列数等于B的行数才有定义,结果是一个 A行B列的矩阵C,C的每个元素值为A对应的行与B对应的列的元素乘积的和 具体看这里 原理 CGAffineTransform CGAffineTransform 的结构如下 struct CGAffineTransform { CGFloat a; CGFloat b; CGFloat c; CGFloat d; CGFloat tx; CGFloat ty; }; typedef struct CGAffineTransform

仿射变换(CGAffineTransform)使用小结

一.理论基础 请参考CGAffineTransform简单分析 二.效果演示 三.实现代码 3.1:位移变换 -(void)positionAnimation{ _demoView.transform = CGAffineTransformIdentity; [UIView animateWithDuration:1.0f animations:^{ _demoView.transform = CGAffineTransformMakeTranslation(100, 100); }]; } 3

iOS方法类:CGAffineTransform的使用大概

CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0.0 这里附上的CGAffineTransform官方文档: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTransform/index.html 总得来说,这个类中包含

iOS方法类:CGAffineTransform

iOS方法类:CGAffineTransform的使用大概 CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0.0 这里附上的CGAffineTransform官方文档: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTr