UIView 的Transform属性以及 CGAffineTransform的使用

什么是Transform?

Transform是一个3×3的矩阵,如下图所示:

通过这个矩阵我们可以对一个坐标系统进行缩放,平移,旋转以及这两者的任意组着操作。而且矩阵的操作不具备交换律,即矩阵的操作的顺序不同会导致不同的结果。UIView有个transform的属性,通过设置该属性,我们可以实现调整该view在其superView中的大小和位置。

  矩阵实现坐标变化背后的数学知识:

常用的三种实现选中的方式:

//  实现的是放大和缩小

view.transform=CGAffineTransformScale(view.transform, 0.5, 0.5);

//实现的是旋转

view.transform=CGAffineTransformRotate(view.transform, 0.2);

//实现的是平移

view.transform=CGAffineTransformTranslate(view.transform, 20, 20);

关于 View.transform = CGAffineTransformIdentity .

如果我们在为一个view设置了多个CGAffineTransform, 那么每一个CGAffineTransform都以在上一个CGAffineTransform运行完后的位置的center作为参照点运行的.

如果我们在每一个CGAffineTransform运行前加一句:

View.transform = CGAffineTransformIdentity

那么会先把view恢复到原始的没有CGAffineTransform运行过得状态, 然后再运行CGAffineTransform.

这样就相当于, 每一个CGAffineTransform运行前, view都会先归位. 然后再运行. 所以没有CGAffineTransform都是以view的原始位置为参考, 互不影响.我们也可以在进行了一系列CGAffineTransform后 通过View.transform = CGAffineTransformIdentity 来让view回到原始状态

有的时候我们需要吧多个CGAffineTransform效果合并一起执行,  那么需要用CGAffineTransformConcat(transT, transS);他会将两个效果合到一起执行,但是需要注意CGAffineTransformConcat(transT, transS)和CGAffineTransformConcat(transS, transT)的实际效果未必一样, 请务必注意.

二、CGAffineTransformMakeTranslation和CGAffineTransformTranslate、CGAffineTransformMakeScale和CGAffineTransformScale、还有CGAffineTransformMakeRotation和CGAffineTransformRotation的区别。

这个我们举个例子来说,

UIButton *Btn1 = [[UIButton alloc] initWithFrame:CGRectMake(0, 200, 120, 40)];

由此我们知道,Btn1的frame是从(0, 200);中心center的位置是(60, 220);

所以执行下:

Btn1.transform = CGAffineTransformMakeTranslation(160, 0); 

这是Btn1的中心位置变成了(220, 220).frame为(160, 200, 220, 220)

如果执行:

Btn1.transform = CGAffineTransformTranslation(CGAffineTransformMakeTranslation(160, 0),20,0),

说明是先执行了 CGAffineTransformMakeTranslation(160, 0),然后又执行了(20, 0).中心位置变为(240, 220), frame变为(180, 200, 240, 220)。

所以CGAffineTransformTranslation(CGAffineTransformMakeTranslation(160, 0),20,0) =  CGAffineTransformMakeTranslation(180, 0)是等价的

同理其它两种的属性。

最后对 CGAffineTransformMake(a,b,c,d,x,y)6个参数可以一次的设置旋转、缩放、移位。

参考文章:1、《CGAffineTransformMakeTranslation和CGAffineTransformTranslate、CGAffineTransformScale和CGAffineTransform》

     2、《UIView的transform属性以及 CGAffineTransform的使用》

时间: 2024-08-03 17:39:55

UIView 的Transform属性以及 CGAffineTransform的使用的相关文章

UIView的transform属性

Transform 属性: UIView有个transform的属性,通过设置该属性,我们可以实现调整该view在其superView中的大小和位置,具体来说,Transform(变化矩阵)是一种3×3的矩阵,通过这个矩阵我们可以对一个坐标系统进行缩放,平移,旋转以及这两者的任意组着操作.而且矩阵的操作不具备交换律,即矩阵的操作的顺序不同会导致不同的结果. 常用的三种实现选中的方式: view.transform=CGAffineTransformScale(view.transform, 0.

UIView 的exclusiveTouch clipsToBounds和transform属性

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 1.UIView 的exclusiveTouch属性 exclusiveTouch的意思是UIView会独占整个Touch事件,具体的来说,就是当设置了exclusiveTouch的UIView是事件的第一响应者,那么到你的所有手指离开前,其他的视图UIview是不会

QF——UI之UIImageView及UIView的形变属性transform

UIImageView: 专门用来放置图片的视图.它里面放置的图片是[UIImage imageNamed: (NSString) imgName]生成的,注意千万别只写成图片NSString类型的名字. UIImageView里有几个支持动画效果的属性和方法.通过播放幻灯片的例子,认识它们: 给UIImage添加手势: UIImageView未继承UIControl,而直接继承UIView,所以它不能直接注册事件.需要通过添加手势来完成交互操作. 1. 在添加手势前先要通过UIImageVie

UIView控件属性

UIView控件属性: 1.alpha 设置视图的透明度.默认为1. // 完全透明 view.alpha = 0; // 不透明 view.alpha = 1; 2.clipsToBounds // 默认是NO,当设置为yes时,超出当前视图的尺寸的内容和子视图不会显示. view.clipsToBounds = YES; 3.hidden // 默认是NO,当设置为yes,视图就看不见了. view.hidden = YES; 4.userInteractionEnabled // 默认为Y

IOS 开发笔记-基础 UI(4)按钮的使用(transform属性)和学习案例

利用transform属性可以修改控件的位移(位置).缩放.旋转.经常用在动画里,比如旋转角度,动画缩放,平移等 先学几个 xcode 开发的小技巧: 故事板的viewcontroll,可以直接拖拽复制,且不同项目里的图片素材也可以相互拖拽复制使用,但是图片的拖拽复制要按option 健进行,否则就是剪切了.那么我们在开发到类似的一些项目的时候,不用每次都重写弄界面,那么可以直接拖拽拷贝故事板,图片拖拽要按住 option 键同时拽到 images.xcassets 目录下即可正常显式,且拖拽到

【UIKit】UIView的常见属性

1.superview 获得自己的父控件对象 @property(nonatomic,readonly)UIView *superview 2.subviews 获得自己的所有子控件对象 @property(nonatomic,readonly,copy)NSArray *subviews; int count=self.view.subviews.count; NSLog(@"控件的个数有%d",count); 3.tag 控件的ID\标志,父控件可以通过tag来找到相应的子控件 @

ios开发transform属性

#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageV; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, t

iOS基础--UIView的常见属性

UIView的常见属性以及方法 @property(nonatomic,readonly) UIView *superview; // 获得自己的父控件对象 @property(nonatomic,readonly,copy) NSArry *subviews; // 获得自己的所有子控件对象 @property(nonatomic) NSInterger tag; // 控件的ID(标识),父控件可以通过tag来找到对应的子控件 @property(nonatomic) CGAffineTra

iOS开发之UIView的常见属性

1.所有控件都继承自UIView,UIView的常见属性如下: @property(nonatomic,readonly) UIView *superview;获得自己的父控件对象 @property(nonatomic,readonly,copy) NSArray *subviews;获得自己的所有子控件对象 @property(nonatomic) NSInteger tag;控件的ID\标识,父控件可以通过tag来找到对应的子控件 @property(nonatomic) CGAffine