CGAffineTransform知识

UIView有一个transform的property。这个值的默认值为此view的bounds的center,当transform不为default value时,view的frame就为未定义属性,可以被忽略,从而可以任意改变view位置。

以下为测试代码。

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) UIView *testView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    CGRect rect = self.view.bounds;
    _testView = [[UIView alloc] initWithFrame:
                 CGRectMake(20, 20, rect.size.width / 2.0 - 60, rect.size.height / 2.0 - 60)];
    _testView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:_testView];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark button action
- (IBAction)moveRight:(id)sender
{
    _testView.transform = CGAffineTransformTranslate(_testView.transform, 10.0f, 0.0f);
}
- (IBAction)moveOrigin:(id)sender
{
    _testView.transform = CGAffineTransformIdentity;
}
- (IBAction)scale:(id)sender
{
    _testView.transform = CGAffineTransformMakeScale(0.9, 0.9);
}
@end
测试demo截图
  • 蓝色背景的view是testView
  • Move Right按钮。让view以当前transform为默认值,做右移。
  • Move Origin按钮。让view回到初始位置。
  • Scale按钮。让view以原始状态x、y均缩小至0.9。
    1. 无论在按下Move Origin前,按了多少次其他两个按钮,view都会回到初始位置(即定义view时的frame属性是的位置)。
    2. 按下Scale按钮。首次按下,蓝色背景view缩小至初始值0.9;以后再按,蓝色背景不会继续缩小,因为CGAffineTransformMakeScale以初始值做缩放。
    3. 按下Move Right按钮,每按一次,蓝色背景view就会右移10个单位;因为CGAffineTransformTranslate传入的第一个参数为基础,在此过程中,若按下Scale按钮,蓝色背景view会回到原处,并缩小。

你可能感兴趣的:(CGAffineTransform知识)