HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 在进行3D转换时,如何让CALayers使用屏幕中心作为消失点?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在屏幕上有一个2D网格视图(我称之为瓷砖).每个图块都有一个子视图,我在动画块中围绕Y轴旋转.我已经在每个磁贴上正确设置了sublayerTransform.我正在旋转的所有子视图都展示了3D视角.问题是每个人的消失点是瓷砖的中心而不是屏幕的中心,破坏了3D的错觉.当我在所有切片的父级上设置sublayerTransform时,旋转视图不会显示任何透视图.我相信这是因为SublayerTransform仅适用于图层的子级而不是太孙子级.如何使所有旋转视图使用相同的消失点?我已经包含了一张绘制得很糟糕的图片,以帮助说明这一点.

解决方法

@H_301_10@ 这是解决方案:你必须将翻译变换添加到超级层,然后通过调整子层的位置来弥补它.我成功地使用了以下代码,只需创建一个空的“单视图应用程序”XCode项目并在iPad模拟器上运行:

- (void)viewDidLoad
{
    [super viewDidLoad];

    for (int i = 0; i < 6; i++)
    {
        CALayer *parent = [CALayer layer];
        parent.frame = CGRectMake(0,100,100);
        parent.position = CGPointMake(70 + 120*i,70);
        parent.BACkgroundColor = [[UIColor greenColor] CGColor];
        [self.view.layer addSublayer:parent];

        float width = self.view.frame.size.width/2.0;
        float offset = (width - parent.position.X);

        CALayer *layer = [CALayer layer];
        layer.frame = CGRectMake(0,40,40);
        layer.position = CGPointMake(-offset + 50,60);
        layer.BACkgroundColor = [[UIColor redColor] CGColor];
        layer.transform = CATransform3DMakeRotation(M_PI_2,1,0);

        CATransform3D tr = CATransform3DMakeTranslation(offset,0);
        CATransform3D t = CATransform3DIdentity ;
        t.m34 = -4.0f/2000.0f ;
        parent.sublayerTransform = CATransform3DConcat(t,tr);

        [parent addSublayer:layer];    
    }
}

大佬总结

以上是大佬教程为你收集整理的ios – 在进行3D转换时,如何让CALayers使用屏幕中心作为消失点?全部内容,希望文章能够帮你解决ios – 在进行3D转换时,如何让CALayers使用屏幕中心作为消失点?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。