使用CATransform3D(Using CATransform3D)

2019-10-17 16:14发布

我努力让自己在一个实现代码如下倾斜表旋转(给类似星球大战开口处爬出一个3D文字爬行的效果)。

环顾四周后,我发现这个问题的目的,С的CALayer UIView的实际旋转

和接受的答案,似乎做我想做的,但是当我申请的代码我的TableView它什么都不做和表出现像往常一样。

这是我复制的代码:

float distance = 50;

CATransform3D basicTrans = CATransform3DIdentity;
basicTrans.m34 = 1.0 / -distance;
_tableView.layer.transform = CATransform3DRotate(basicTrans, M_PI_4, 1.0f, 0.0f, 0.0f);

我在我的viewDidLoad方法创建我的字符串数组后,把这种(即填充的tableView)

我目前只在控制器其他三个方法:

didReceiveMemoryWarning(自动ADDD项目创建时)

的tableView:numberOfRowsInSelection(用于设置表视图)的tableView:的cellForRowAtIndexPath(用于设置表视图和设置文本细胞形成阵列)

我的理解是,tableview中有一个CALayer的,那CATransform3D操纵这给视图的表示在3D空间。 如果我的理解是正确的话,我不知道为什么被正常显示在屏幕上的名单? 我很欣赏的数字我不能给我想要的还没有效果,但他们应该以免影响了的tableView在屏幕上的外观。

我也有进口QuartzCore等,并在链接的框架中加入它


解决方案是使用标记为在该OLD答案的代码 - (UITableViewCell的*)的tableView:的cellForRowAtIndexPath:方法细胞检查被空了。

Answer 1:

由于以下建议的做法没有奏效,还有一件事我会尝试正在申请将变换UITableView的子视图。 其实, UITableView是一个UIScrollView ,所以它只是一个子视图组成表视图的实际内容的容器。 我会尝试这样的事:

for (UIView* subview in tableView.subviews) {
  subview.layer.transform = ...;
}

我从来没有检查表视图子视图层次,所以我不能说这是否会工作,或者你倒是应该应用转换到子视图只有一个,但我希望这会导致你在正确的方向。

OLD答案:

你可以尝试设置你的表视图的层sublayerTransform而不是'变换':

您通常使用此属性来增加视角等观看效果嵌入层。 您可以通过设置子转换成所需的投影矩阵添加观点。 此属性的默认值是恒等变换。

( 源 )。

我基于一个假设暗示该UITableView有相当复杂的结构,在子视图方面,所以改造只是观点的层可能没有任何效果。 我还没有尝试过,虽然,所以我不能保证它会奏效。



文章来源: Using CATransform3D