控件旋转frame的计算

来源:互联网 发布:哆啦A梦 知乎 编辑:程序博客网 时间:2024/06/10 00:12

在做一个UITableView横向滚动的例子时遇到了视图旋转后frame设置不准的情况,通过分析,总结以下计算方法:
控件旋转根据锚点进行旋转,锚点默认为0.5,为控件的中心点,锚点是不变的,根据锚点在已知旋转后frame的情况下计算出转换前的frame,p2(x2,y2,w2,h2) p1(x1,y1,h2,w2),图中,w2和h1的值相同,h2和w1的值相同
这里写图片描述

注明:w2 ==h1, h2==w1

旋转表格的代码:

- (void)viewDidLoad {    [super viewDidLoad];    //p2(0,20,w,h)    //p1(x,y,h,w)    //转换后的高度    CGFloat w2 = self.view.frame.size.width;    CGFloat h2 = 100;    CGFloat y2 =20;    //带人公式计算得出转换前的frame值    CGFloat x1 = (w2-h2)/2;    CGFloat y1= (2*y2+h2-w2)/2;    UITableView *tableview= [[UITableView alloc]initWithFrame:CGRectMake(x1,y1,h2 , w2) style:UITableViewStylePlain];    tableview.backgroundColor = [UIColor grayColor];    tableview.dataSource =self;    tableview.delegate =self;    //tableview逆时针旋转90度。    NSLog(@"%@",NSStringFromCGRect(tableview.frame));    tableview.transform = CGAffineTransformMakeRotation(-M_PI / 2);    NSLog(@"%@",NSStringFromCGRect(tableview.frame));    [self.view addSubview:tableview];    self.tableView = tableview;}

效果图如下:
这里写图片描述

1 0