问题标签 [catransform3d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2167 浏览

objective-c - 从子弹物理四元数转换为角度以与 CATransform3DMakeRotation 一起使用

我使用 CATransformLayer 构建了一个 6 面的 3D 骰子,将其用作容器层,将 6 个变换层夹入一个可以在空间中旋转的 3D 对象。我从这里得到了这个想法。它运行良好,我可以在顶层旋转调用 CATransform3DMakeRotation 的“骰子”,骰子旋转并且运行良好。

下一步是在程序中插入“子弹物理”。我已经工作了,但是我被卡住了,因为我不知道如何将其物理世界中骰子的“子弹物理‘四元数’方向”转换为可以传递给容器 CALayer 方法的旋转角度。

这是我正在做的事情:

1)调用“子弹物理”来获得骰子的方向:

2)将四元数转换为欧拉(很多时间谷歌搜索答案发现下面复制的方法) qW = quatO.getW(); qX = quatO.getX(); qY = quatO.getY(); qZ = quatO.getZ(); [自我四元数ToEuler];

3) 将新的欧拉角应用到我的 CALayer (sCtrl)

注1:这是我用来旋转我的 calayer 的方法

注2:这是我发现将四元数转换为欧拉的方法。

总之,我的目标:在我的程序中使用 CALayer(不是 OpenGL)代表一个“子弹物理”框(骰子)。为了做到这一点,我使用 CATransformLayer 作为 6 个转换层到 3D 对象的容器。

- 我现在得到的结果不好,图形骰子旋转但显然不正确......所以我在这里做的事情完全错误......

问题是:鉴于我可以在子弹物理世界中获得 BOX 的“方向或旋转”,我如何将返回的四元数转换为可用于 CATransform3DMakeRotation 的东西(角度)。

非常感谢提前,

路易斯

0 投票
1 回答
13837 浏览

xcode - UIView 垂直翻转

我知道这可能是一个愚蠢的问题,但我不得不问:如何UIView垂直翻转?我不是要求做动画,只是翻转它。

我可以UILabel通过以下方式进行垂直翻转:

label1.layer.transform = CATransform3DMakeRotation(M_PI, 1.0f, 0.0f, 0.0f);

并通过以下方式将其转回:

但是当我这样做时:

我认为它只旋转了一半......那么,有什么想法吗?

多谢你们。

0 投票
4 回答
1868 浏览

iphone - 仅在 RETINA 上使用 CATransform3D 模糊 UIView

我正在显示一个带有 UILabel 的 UIView,并且这个视图和标签一旦到达这些行代码就会变得模糊:

在整个应用程序中,我使用 CA3DRotations 和其他东西,这以前从未发生过。另外,我只使用整数设置视图的框架和标签!所以这不是半像素问题或类似的问题,我知道这会导致大多数模糊问题,但不是我的!

在模拟器上不模糊,iPad不模糊,iPhone3GS不模糊。只有在配备 Retina 显示屏的 iPhone4 上,它才会变得模糊。甚至在我进行任何 3D 旋转之前!在我发疯之前有人知道吗?

0 投票
2 回答
968 浏览

objective-c - 带有 3D 变换的 Retina 显示屏上的核心图形

所以,我似乎问了一些棘手的问题,但我又来了。

我有一个看起来很奇怪的问题。在我的一些观点中,我通过将工具栏在 x 轴上旋转 90 度来隐藏顶部的工具栏。然后我允许它们被用户“拉下”,这会将视图旋转到 0 度,从而显示工具栏。除了在一个视图上我有两个工具栏要下拉外,这一切都很好。这通过向下旋转第一个工具栏然后第二个工具栏来工作,第一个工具栏向下移动第二个工具栏的高度。所有这些在非视网膜显示器上都可以正常工作。然而,在视网膜显示器上,第一个工具栏的位移只有它应该的一半。此外,视图的框架正是它应该是的。换句话说,当我检查(NSLog)时,我得到一个框架,{0, 30, 320, 30}但实际图像显示在框架上:{0, 15, 320, 30}. 只是背景发生了变化。如果我点击视图应该是的空间,触摸事件就会通过。

这是视网膜屏幕上发生的事情:

在此处输入图像描述

这是在非 Retina 屏幕上发生的情况(完全相同的代码):

在此处输入图像描述

这是我用来旋转视图的代码(非常简单):

同样,这只发生在视网膜显示器上。

现在,工具栏正在 Core Graphics 中呈现。所以我通过从drawRect中完全删除它来消除我的CG代码作为问题的根源,这样draw rect中就没有代码了;问题仍然存在。我还注意到,如果我不使用 drawRect(注释掉整个方法),旋转会正确发生,但所有子视图(也使用核心图形)都以 1/2 的分辨率呈现,因此一切看起来都很模糊:

在此处输入图像描述

我认为这与转换有关,但我不确定如何或为什么。如果我在旋转设置回 0 弧度后将图层变换设置为标识(因此它完全在视图中),则视图将捕捉到其正确位置。我还注意到,在 0 弧度处,变换并不完全一致:m34(透视)仍然设置。将其设置回零确实可以解决问题。但是,当视图处于 0 rad 以外的任何其他旋转时,将其设置为零并不能解决问题。并且未从原点 {0,0} 向下旋转的视图仍会移动。似乎问题发生在任何 3d 变换期间,尽管我已经检查了所有变换以确认这一点。

更新

由于@Joshua Weinberg 的回答,我开始搞乱图层的 rasterizationScale。我发现底层图像的偏移量偏离了 1/rasterizationScale。因此,如果我将 rasterizationScale 设置为 6 并将视图向下移动 30,则背景图像仅向下移动 30/6 (5.0f)。

更新 2

我尝试了一种技巧,将图像翻译下来。它的工作原理是图像向下移动适当的量,但它也会使图像消失。所以这个代码在我的旋转方法中:

产生这个: 在此处输入图像描述

0 投票
2 回答
565 浏览

iphone - CATransform3D 奇怪的 UIScrollView contentOffset

当 UIScrollview 在 scrollViewDidScroll 委托方法中滚动时,我正在做一个很酷的 CA3DTransform。当您使用手指滚动时,它可以完美运行,因此手动滚动时一切都很完美。

但是,当我以编程方式设置滚动视图 contentoffset 时,例如:

它仍然调用委托方法scrollviewdidscroll,因此调用了相同的动画方法,所以我仍然看到正确的动画,但是,在动画期间和之后,视图的某些部分丢失了!我试图在所有东西上设置 layer.zPosition ,但它似乎没有帮助。应该没问题,因为手动滚动确实可以工作而不会丢失部分视图...以某种方式以编程方式调用此方法有所不同,我不知道为什么!

0 投票
1 回答
623 浏览

iphone - 在 X 方向旋转两个 UIImageView

我想旋转两个图像,我将一个图像放在另一个图像后面,但是当我使用以下代码旋转它们时,后面的图像将在前面的图像之上,我分配了它们的 ZPOstion,但它们没有变化

这个链接是我在旋转之前查看的链接http://i39.tinypic.com/ivv2ah.png

并在旋转http://i43.tinypic.com/ic05xj.png

这是怎么发生的

CArdImage 是自定义 UIImageView 这就是我改变的

0 投票
2 回答
5364 浏览

iphone - 3D 动画 - CABasicAnimation 和 CATransform3D 提供视图之间的差距

所以,我正在尝试 在第一个视图中实现这个应用程序http://itunes.apple.com/us/app/spg-mobile-app/id312306003?mt=8中的动画

我已经实现了翻转视图的动画,并且我成功地为一侧设置动画,当我给出反向翻转的反向逻辑时,它在视图之间产生了一些差距

这是我的代码

所以,在这里我首先调用执行方法,在这里我上传了我的总代码在这里


这段代码对我有用,但仍然有一些差距,问题是当前视图的框架和即将到来的视图应该相同

0 投票
1 回答
473 浏览

ios - 设置 CATransform3D 透视变换的消失点

有谁知道在使用 CATransform3D 变换创建透视效果时如何定义消失点坐标?我有代码可以旋转图像并查看添加的透视效果,但我需要能够指定消失点的位置,这似乎是一些不可修改的默认参数。我进行了广泛的搜索,得出的结论是,这可能是不可能的,并且需要我改为查看 OpenGL。感谢任何帮助。干杯。

0 投票
1 回答
563 浏览

ios - 以标签为子视图的 CATransform3D 旋转

我有一个关于 CATransform3D 的问题。

我有一个视图A,其中包含一个标签B。B的图层位置是A的中心。B用于显示通知消息。我想将A旋转180度,当然B中的文字会颠倒。所以我也必须将 B 旋转 180 度。一切看起来都很简单,实际上在模拟器中它工作正常。

但是当我在设备上加载时,A 和 B 确实旋转了,但是 B 的位置发生了变化。现在我只能看到 B 的一半,另一半不在 A 中。

我的猜测是,当旋转 A 时,因为 B 与 A 的坐标系相关,它被翻转了 180 度,所以 B 的位置发生了变化。

但我想知道是否有人知道如何解决这个问题,或者你们是否有更好的方法来解决。

非常感谢。

更新

我仍然无法弄清楚为什么 B 的位置会移动,但我想出了另一种方法来实现相同的动画。有点棘手。

关键是animation.autoreverse,我们知道当你用 Pi 旋转 label 的 super view 时,label 中的文字会被倒置旋转。所以我所做的是将超级视图旋转 Pi/2,保持相同的 duration 和 set autoreverse = YES,它将做的是它将超级视图旋转 Pi/2,然后将其旋转回初始状态。结果证明视图根本没有旋转,但是对于用户的视觉来说,它是旋转的。

0 投票
3 回答
9534 浏览

objective-c - CATransform3DRotate 水平翻转

我有一个需要转换的层。目前我正在使用以下内容:

这正确地使图层正面朝上,但它也需要水平翻转,因为它是错误的方式。我该如何调整CATransform3DRotate才能做到这一点?