iOS学习笔记3-Affine变换

来源:互联网 发布:淘宝职业打假人名单 编辑:程序博客网 时间:2024/06/06 09:32


       今天我们来讲讲UIView中提供的对其内容进行affine变换的功能。具体来说,变换包括扩大、缩小、旋转、反转、平移等。

           要进行affine变换,其实就是想UIView的transform属性中设置CGAffineTransform的结构体。当然,这需要行列式的知识。为了方便初学者的理解,此处就绕过行列式的设置,直接利用UIKit库为我们提供的变形类型。

        此处,我做了一个旋转的demo。希望通过这个,能让初学者举一反三的学会其他的affine操作。

      

- (void)viewDidLoad
{
    [super viewDidLoad];

//初始化视图

    UIImage *catIMG = [UIImage imageNamed:@"cat"];
    catView = [[UIImageView alloc]initWithImage:catIMG];
    catView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    [self.view addSubview:catView];
//加入一个button,实现旋转操作的触发
    UIButton *changeView = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    changeView.frame = CGRectMake(0, 0, 100, 40);
    changeView.center = CGPointMake(160, 400);
    [changeView setTitle:@"Affine" forState:UIControlStateNormal];
    changeView.titleLabel.font = [UIFont boldSystemFontOfSize:12];
//利用此方法实现------Action方法,即旋转操作
    [changeView addTarget:self action:@selector(Action) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:changeView];
    
}
- (void)Action{

//利用CGAffineTransformMakeRotation(度数)实现UIImageView的旋转,当然,如UIlabe和UIButton等UIView子类也同样适用

    catView.transform = CGAffineTransformMakeRotation(90 * (M_1_PI / 180.0));
}

效果如如下:

点击button后,调用Action方法,实现旋转的效果图如下:


当然,CGAffineTransform的变换类型还有:

扩大缩小:CGAffineTransformMakeScale(宽度倍数,高度倍数)

左右反转:CGAffineTransformScale( 原CGAffineTransform对象,-1.0,1.0)

上下反转:CGAffineTransformScale( 原CGAffineTransform对象,1.0,-1.0)

平行移动:CGAffineTransformMakeTranslation(向右移动像素,向上移动像素)

两个函数的复合:CGAffineTransformContact( CGAffineTransform1,CGAffineTransform2)