作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个折叠式 Facebook 菜单,就像您在这里看到的那样:http://www.mobileinc.co.uk/2012/05/folding-iphone-sidebar-menu/
现在,我只是在研究“折叠”部分。我有2层:- 左层的 anchor 位于 {1,.5}- 右层的 anchor 位于 {0,.5}
我可以让它们折叠在我的主视图中间,不会出现这样的问题: CGFloat 宽度 = self.view.frame.size.width; CGFloat 目的地宽度 = slider.value * 宽度;
CGFloat hypothenuse = self.view.frame.size.width/2.0f;
CGFloat adjacent = destinationWidth / 2.0f;
CGFloat opposite = sqrtf(powf(hypothenuse, 2)-powf(adjacent, 2));
CGFloat marginLeft = (width - destinationWidth) / 2;
CGFloat angle = asinf(opposite/hypothenuse);
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0f / -4000.0f;
rightSide.layer.transform = CATransform3DRotate(CATransform3DTranslate(transform,0,0,-opposite),-angle, 0, 1, 0);
leftSide.layer.transform = CATransform3DRotate(CATransform3DTranslate(transform,0,0,-opposite),angle, 0, 1, 0);
这非常有效。当我尝试像这样在 x 轴上平移图层时,问题就出现了: CATransform3DTranslate(transform,-marginLeft,0,-opposite)
图层仍然会随着良好的 z 平移而折叠,但会以一个尴尬的角度结束,就好像整个 View 已旋转一样。
这显然与视角相关(当我不设置 m34 时,它“起作用”),但我不知道如何补偿它......
提前谢谢您!
干杯,
TeuBeu2
最佳答案
您正在按以下顺序编写 4 个转换:
问题是你想在投影之后而不是之前进行平移 X。事实上,您将用投影将折痕向中心拉回一点。试试这个:
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0f / -4000.0f;
transform = CATransform3DConcat(transform, CATransform3DMakeTranslation(-marginLeft,0,0));
rightSide.layer.transform = ...
免责声明:我还没有实际测试过
关于iphone - CATransform3DTranslate 之后的 CATransform3DRotate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10933569/
我是一名优秀的程序员,十分优秀!