CGAffineTransform属性

transform我们一般称为形变属性,其本质是通过矩阵变化改变控件的大小、位置、角度等,这里我们通过一个例子来看一下具体的操作,在下面的例子中我们也会看到UIImageView控件的常用操作。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.redView = [[UIView alloc]initWithFrame:CGRectMake(100, 200, 100, 100)];
    self.redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:self.redView];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self Translate];
}

//旋转
- (void)Rotate{
    self.redView.transform = CGAffineTransformRotate(self.redView.transform, M_PI_4);
}

//缩放
- (void)Scale{
     self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
}

//移动
- (void)Translate{
    self.redView.transform = CGAffineTransformTranslate(self.redView.transform, 0, 50);
}
  • 获得CGAffineTransform有多种方法,例如使用CGAffineTransformMake,但是对于矩阵操作相对比较麻烦,事实上iOS已经为我们准备好了三个方法:CGAffineTransformMakeRotation(旋转)、CGAffineTransformMakeScale(缩放)、CGAffineTransformMakeTranslation(移动);
  • transform进行旋转、缩放、移动的时候不是在原来的基础上增量形变的,因此如果需要持续在原来的基础上旋转、缩放、移动那么每次需要在原来的基础上增加或减少。当然,我们可以定义一个全局变量进行累加,但是事实上iOS已经为我们提供好了三个对应的方法,分别用于在原来的角度、缩放、移动位置的基础上做出修改:CGAffineTransformRotate、CGAffineTransformScale、CGAffineTransformTranslate;

iOS开发UI篇—transframe属性(形变)

1. transform属性

在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度

常用的创建transform结构体方法分两大类

(1) 创建“基于控件初始位置”的形变

CGAffineTransformMakeTranslation(平移)

CGAffineTransformMakeScale(缩放)

CGAffineTransformMakeRotation(旋转)

(2) 创建“基于transform参数”的形变

CGAffineTransformTranslate

CGAffineTransformScale

CGAffineTransformRotate

补充:

在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI

正数表示顺时针旋转

负数表示逆时针旋转

提示:由于transform属性可以基于控件的上一次的状态进行叠加形变,例如,先旋转再平移。因此在实际动画开发中,当涉及位置、尺寸形变效果时,大多修改控件的transform属性,而不是frame、bounds、center 。

时间: 2024-10-13 22:43:54

CGAffineTransform属性的相关文章

iOS Core Animation Advanced Techniques-变换

上四章节: 图层树 图层的寄宿图 图层几何学 图层视觉效果 这篇随笔主要介绍有关图层变换. 变换: 对图层旋转,摆放或者扭曲的CGAffineTransform,可以将扁平物体转换成三维空间对象的CATransform3D 仿射(图层中平行的两条线在变换之后任然保持平行)变换: CGAffineTransform属性(仅对2D变换有效) 用于在二维空间做旋转,缩放与平移 CALayer的affineTransform属性就是一个CGAffineTransform类型对象,UIView对应的属性为

iOS-Core Animation: 变换

仿射变换 用 CGPoint 的每一列和 CGAffineTransform 矩阵的每一行对应元素相乘再求 和,就形成了一个新的 CGPoint 类型的结果.要解释一下图中显示的灰色元素, 为了能让矩阵做乘法,左边矩阵的列数一定要和右边矩阵的行数个数相同,所以要 给矩阵填充一些标志值,使得既可以让矩阵做乘法,又不改变运算结果,并且没必 要存储这些添加的值,因为它们的值不会发生变化,但是要用来做运算. UIView 的 transform 属性是一 个 CGAffineTransform 类型,用

UIView 的Transform属性以及 CGAffineTransform的使用

什么是Transform? Transform是一个3×3的矩阵,如下图所示: 通过这个矩阵我们可以对一个坐标系统进行缩放,平移,旋转以及这两者的任意组着操作.而且矩阵的操作不具备交换律,即矩阵的操作的顺序不同会导致不同的结果.UIView有个transform的属性,通过设置该属性,我们可以实现调整该view在其superView中的大小和位置. 矩阵实现坐标变化背后的数学知识: 常用的三种实现选中的方式: //  实现的是放大和缩小 view.transform=CGAffineTransf

UIView的常见属性

@property(nonatomic,readonly) UIView *superview; 获得自己的父控件对象 @property(nonatomic,readonly,copy) NSArray *subviews; 获得自己的所有子控件对象 @property(nonatomic) NSInteger tag; 控件的ID(标识),父控件可以通过tag来找到对应的子控件 @property(nonatomic) CGAffineTransform transform; 控件的形变属性

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

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

UI基础UIView常见属性及方法

1.NSBundle 1> 一个NSBundle代表一个文件夹,利用NSBundle能访问对应的文件夹 2> 利用mainBundle就可以访问软件资源包中的任何资源 3> 模拟器应用程序的安装路径 /Users/aplle/资源库/Application Support/iPhone Simulator/7.1/Applications 2.UIImageView和UIButton 1> 使用场合 * UIImageView: 如果仅仅是显示图片,不需要监听图片的点击 * UIB

开发进阶03_UIView的常见属性

frame:类型是CGRect @property (nonatomic) CGRect frame; 控件所在矩形框的位置和尺寸(以父控件的左上角为坐标原点) bounds @property (nonatomic) CGRect bounds; 控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x.y一般为0) center @property (nonatomic)CGPoint  center: 控件的中点位置(以父控件的左上角为坐标原点) NSUInteger  =

UIView常见属性方法

UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem>/** *  通过一个frame来初始化一个UI控件 */- (id)initWithFrame:(CGRect)frame; // YES:能够跟用户进行交互@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;  // d

CGAffineTransform相关函数

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