Ios CATTransform3D UIScrollView缩放透视变换(3D)

Ios CATTransform3D UIScrollView缩放透视变换(3D),ios,uiscrollview,rotation,zooming,catransform3d,Ios,Uiscrollview,Rotation,Zooming,Catransform3d,我一直在尝试应用透视变换,以实现类似于Apple Maps 3D效果的效果,并添加了一个约束,即一旦达到某个缩放比例,就应用变换,而不是单击按钮启用该功能 为了实现这一点,我已经做了以下非常错误的结果 - (void)scrollViewDidEndZooming:(UIScrollView *)scr withView:(UIView *)view atScale:(CGFloat)scale { NSLog(@"Scale: %f", scale); CATransform

我一直在尝试应用透视变换,以实现类似于Apple Maps 3D效果的效果,并添加了一个约束,即一旦达到某个缩放比例,就应用变换,而不是单击按钮启用该功能

为了实现这一点,我已经做了以下非常错误的结果

- (void)scrollViewDidEndZooming:(UIScrollView *)scr withView:(UIView *)view atScale:(CGFloat)scale {
    NSLog(@"Scale: %f", scale);

    CATransform3D transform = CATransform3DIdentity;
    //z distance
    float distance = [[UIScreen mainScreen] bounds].size.height;

    transform.m34 = - 1.0/distance;

    transform = CATransform3DRotate(transform, scale * 15 * M_PI / 180.0f, 1.f, 0.0f, 0.0f);

    [UIView animateWithDuration:0.3 animations:^{

        image.layer.transform = transform;
        image.layer.zPosition = distance * ratio;
        image.layer.position = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, [[UIScreen mainScreen] bounds].size.height/3);
    }];

    previousScale = scale;
}
最终的结果是第一次应用透视变换。但是,它也会转换imageview,这不是我想要的。此外,后续的缩放尝试似乎将继续使用前一个旋转作为基础旋转。我认为将变换设置为标识变换将重置此行为

此外,任何指向实现旋转效果的指针都将非常感谢

简单地说,我的问题如下:如何正确使用m34转换来实现类似于Apple Maps 3D效果的转换效果

附加问题:你能为我指出实现旋转效果的正确方向吗


谢谢

要实现某种透视效果,仅在根视图中更改m34值是不够的。这个主题相当复杂,实际上需要一个特殊的托管层——CATTransferMLlayer。
在这里,我找到了一个可以帮助你的方法。层语言中的旋转应用于锚点

你能再具体一点吗?我知道我应该使用CATTransfermLayer,但是,您的回答只说明了发生偏移的原因。您能找到解决方案吗?正在寻找类似的解决方案,找不到。。。请帮帮我。。。