在做一个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;
}
效果图如下: