【问题标题】:CATransform3D no perspectiveCATransform3D 无透视
【发布时间】:2014-07-05 19:08:04
【问题描述】:

我以前做过这个,但不知何故我没有让它工作。我用谷歌搜索了一下,但我找到的答案都没有解决它。

我只是想向我的self.view 添加一个小视图,并希望通过透视图在其 y 轴上旋转这个添加的子视图。

代码如下:

UIView *rotatingView = [[UIView alloc] initWithFrame:(CGRect){{40.0f, 50.0f}, 50.0f, 50.0f}];
rotatingView.backgroundColor = [UIColor lightGrayColor];
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -500.0;

transform = CATransform3DMakeRotation(DEGREES_RADIANS(20.0f), 0.0f, 1.0f, 0.0f);
rotatingView.layer.transform = transform;
[self.view addSubview:rotatingView];

这很简单。但绝对没有任何观点。我希望看到一个“倾斜”的视图,以便它给出它在 y 轴上旋转的透视图,但无济于事。

我什至尝试设置zPositionanchorPoint,但没有任何帮助。

我有一种感觉,我只是缺少一些非常简单的东西。我之前是怎么做的已经不在我的脑海里了。

【问题讨论】:

    标签: ios objective-c cgaffinetransform catransform3d


    【解决方案1】:

    您正在用旋转变换覆盖具有透视的变换

    // Define the "transform" variable here
    CATransform3D transform = CATransform3DIdentity;
    transform.m34 = 1.0 / -500.0;
    
    // assign a new transform to it here
    transform = CATransform3DMakeRotation(DEGREES_RADIANS(20.0f), 0.0f, 1.0f, 0.0f);
    

    您可能应该改用CATransform3DRotate

    transform = CATransform3DRotate(transform, DEGREES_RADIANS(20.0f), 0.0f, 1.0f, 0.0f);
    

    【讨论】:

    • 所以一般来说,什么时候应该使用CATransform3DMakeRotationCATransform3DRotate 并使用xyz 值总是需要是01 ,如果不是,设置01 以外的其他值如何影响转换(即322)?
    • ...MakeRotation 创建一个新的变换,...Rotate 旋转另一个变换。您可以将...MakeRotation 视为...Rotate 的一个特例,其中身份转换正在旋转。
    • 您也可以使用CATransform3DConcat自行创建单独的转换并按顺序连接它们
    • x, y, z 值在两种情况下都相同,用于定义旋转轴。
    • 您可以指定 0.33, 0.0, 0.66 之类的内容以围绕倾斜角度旋转。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2013-01-06
    • 2016-10-13
    相关资源
    最近更新 更多