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会回到原处,并缩小。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容