CAT变换3D UIScrollView透视变换缩放(3D)

时间:2014-08-16 17:47:01

标签: ios uiscrollview rotation zoom catransform3d

我一直在尝试应用透视变换来实现类似于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效果的转换效果。

奖金问题:你能否指出我正确的方向来实现轮换效果。

谢谢!

1 个答案:

答案 0 :(得分:0)

要实现某种视角,更改根视图中的m34值是不够的。该主题非常复杂,实际上需要一个特殊的托管层CATransformLayer 在这里,我发现blog article可以帮助您。在锚点中应用层语言的旋转。