关闭

iOS 官方文档 CGAffineTransform

标签: ios官方文档
290人阅读 评论(0) 收藏 举报
分类:

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

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);
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:233677次
    • 积分:5306
    • 等级:
    • 排名:第5116名
    • 原创:302篇
    • 转载:10篇
    • 译文:0篇
    • 评论:82条
    最新评论