我想以一种方式改变一个UIView,为它添加一个透视(有两个消失点)(见下文)。
我想用视图执行此操作的原因是因为我希望转换视图的内容是UITableView的单元格。
我是这种编码的新手,但我认为我必须更改属于子视图的CALayer。但是,我相信,我感兴趣的转换无法使用CATransform3D创建。
有没有人知道如何解决这个问题?
答案 0 :(得分:1)
似乎我找到了一种规避/解决问题的方法:
使用CATransform3D转换,可以通过将视图分成两个部分(两个独立的UITableViews)来近似到有利位置。这些应该由UIViewController(不是x代码提供的UITableViewController)来管理,它实现了必要的协议。
然后在viewDidLayoutSubviews:方法中使用以下代码转换两个tableviews。
- (void) viewDidLayoutSubviews {
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
// left View
// vantage point
rotationAndPerspectiveTransform.m34 = 1.0 / -150.0;
// Z-rotation of 90°
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 90.0 * M_PI/180.0, 0, 0,1);
// X-rotation of 25°
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, -25.0 * M_PI/180.0, 1, 0,0);
// left view
[self.view viewWithTag:1].layer.transform = rotationAndPerspectiveTransform;
//right view
rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -150;
// Z-rotation of 90°
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 90.0 * M_PI / 180.0, 0, 0,1);
// X-rotation of 30°
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 25.0 * M_PI / 180.0, 1, 0,0);
// right view
[self.view viewWithTag:2].layer.transform = rotationAndPerspectiveTransform;
}
转换后,可以移动两个tableview,使它们整齐地融合在一起。唯一剩下的工作是连接一台电视机的滚动与另一台电视机的滚动。我还没想出那个。