火山

立志做一名优秀的软件工程师,在技术上追求一专多能,在思想上追求与时具进。...

iOS 官方文档 CGAffineTransform

一、创建一个仿射变换矩阵(单个变换)

1、CGAffineTransformMake

(1) 方法原型

CGAffineTransform CGAffineTransformMake ( CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty );

2、CGAffineTransformMakeRotation

(1) 方法原型

CGAffineTransform CGAffineTransformMakeRotation ( CGFloat angle );
//旋转

(2) 事例代码

//实现旋转
- (void)transform1
{
    [UIView animateWithDuration:3.0
                     animations:^{
    view.transform=CGAffineTransformRotate(view.transform, M_PI); //旋转
                     }];

}

3、CGAffineTransformMakeScale

(1) 方法原型

CGAffineTransform CGAffineTransformMakeScale ( CGFloat sx, CGFloat sy );
//缩放

(2) 事例代码

//实现放大或缩小
- (void)transform2
{
    [UIView animateWithDuration:3.0
                     animations:^{
                        view.transform=CGAffineTransformScale(view.transform, 1.0, 2.0); //实现的是放大和缩小
                     }];

}

4、CGAffineTransformMakeTranslation

(1) 方法原型

CGAffineTransform CGAffineTransformMakeTranslation ( CGFloat tx, CGFloat ty ); //平移

(2) 事例代码

//实现平移
- (void)transform3
{
    [UIView animateWithDuration:3.0
                     animations:^{
                         view.transform=CGAffineTransformTranslate(view.transform, 20, 20); //平移
                     }];

}

二、修改仿射变换矩阵(组合变换)

1、CGAffineTransformTranslate

(1) 方法原型

CGAffineTransform CGAffineTransformTranslate ( CGAffineTransform t, CGFloat tx, CGFloat ty );
//transform+平移

(2) 事例代码

//transform+平移
- (void)transform4
{
    [UIView animateWithDuration:3.0
                     animations:^{
                         view.transform=CGAffineTransformTranslate(CGAffineTransformRotate(view.transform, M_PI), 100, 100); //旋转+平移
                        // view.transform=CGAffineTransformTranslate(CGAffineTransformScale(view.transform, 1.0, 2.0), 100, 100); //缩放+平移

                     }];
}

2、CGAffineTransformScale

(1) 方法原型

CGAffineTransform CGAffineTransformScale ( CGAffineTransform t, CGFloat sx, CGFloat sy );
//transform+缩放

(2) 事例代码

//transform+缩放
- (void)transform5
{
    [UIView animateWithDuration:3.0
                     animations:^{
                         //view.transform=CGAffineTransformScale(CGAffineTransformRotate(view.transform, M_PI), 0.5, 0.5); //旋转+缩放
                          view.transform=CGAffineTransformScale(CGAffineTransformTranslate(view.transform, 20, 20), 0.5, 0.5); //平移+缩放

                     }];
}

3、CGAffineTransformRotate

(1) 方法原型

CGAffineTransform CGAffineTransformRotate ( CGAffineTransform t, CGFloat angle );
// transform+旋转

(2) 事例代码

//transform+旋转
- (void)transform6
{
    [UIView animateWithDuration:3.0
                     animations:^{
                         view.transform=CGAffineTransformRotate(CGAffineTransformScale(view.transform, 1.0, 2.0), M_PI); //缩放+旋转
                        // view.transform=CGAffineTransformRotate(CGAffineTransformTranslate(view.transform, 20, 20), M_PI); //平移+旋转

                     }];
}

4、CGAffineTransformInvert

(1) 方法原型

CGAffineTransform CGAffineTransformInvert ( CGAffineTransform t );
//反向变换效果,比如本来是放大的变换,使用了这个方法之后,就变成了缩小的变换了

(2) 事例代码

//反向transform效果
- (void)transform7
{
    [UIView animateWithDuration:3.0
                     animations:^{
                        // view.transform=CGAffineTransformInvert(CGAffineTransformTranslate(view.transform, 20, 20)); //平移
                         view.transform=CGAffineTransformInvert(CGAffineTransformScale(view.transform, 1.0, 2.0)); //缩放

                     }];
}

5、CGAffineTransformConcat

(1) 方法原型

CGAffineTransform CGAffineTransformConcat ( CGAffineTransform t1, CGAffineTransform t2 );
//同时进行两个变换

(2) 事例代码

//同时进行两个变换
- (void)transform8
{
    [UIView animateWithDuration:3.0
                     animations:^{
                         view.transform=CGAffineTransformConcat(CGAffineTransformScale(view.transform, 1.0, 2.0),CGAffineTransformTranslate(view.transform, 20, 20)); //缩放+平移

                     }];
}

三、运用仿射变换

1、CGPointApplyAffineTransform

(1) 方法原型

CGPoint CGPointApplyAffineTransform ( CGPoint point, CGAffineTransform t );
//把变化应用到一个点上

(2) 说明

CGPoint CGPointApplyAffineTransform (
CGPoint point,
CGAffineTransform t );
这个方法的返回值还是一个CGPoint,在我看来由于是一个点,
这个方法最终也只会影响这个点所在的位置。

2、CGSizeApplyAffineTransform

(1) 方法原型

CGSize CGSizeApplyAffineTransform ( CGSize size, CGAffineTransform t );
//运用到一个区域中

(2) 说明

CGSize CGSizeApplyAffineTransform (
CGSize size,
CGAffineTransform t);
只会改变区域的大小

3、CGRectApplyAffineTransform

(1) 方法原型

CGRect CGRectApplyAffineTransform ( CGRect rect, CGAffineTransform t );
//运用到一个带原点的区间

(2) 说明

CGRect CGRectApplyAffineTransform (
CGRect rect,
CGAffineTransform t);


这个我亲自试验过,三个属性 放缩、旋转和平移都有的一个Transformation ,
但处理之后只会改变这个区域原点的位置,和宽、高的大小,并不会旋转

四、评估仿射变换

1、CGAffineTransformIsIdentity

(1) 方法原型

bool CGAffineTransformIsIdentity ( CGAffineTransform t );

(2) 说明

CGAffineTransformIsIdentity //检测一个Transformation是不是恒等变换,也就是说不变

bool CGAffineTransformIsIdentity ( CGAffineTransform t);//其结果返回一个BOOL值

2、CGAffineTransformEqualToTransform

(1) 方法原型

bool CGAffineTransformEqualToTransform ( CGAffineTransform t1, CGAffineTransform t2 );

(2) 说明

CGAffineTransformEqualToTransform //检测两个Transformation是否相等。

bool CGAffineTransformEqualToTransform (
CGAffineTransform t1,
CGAffineTransform t2);
阅读更多
文章标签: ios 官方文档
个人分类: iOS开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

iOS 官方文档 CGAffineTransform

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭