我一直在尝试应用透视变换来实现类似于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效果的转换效果。
奖金问题:你能否指出我正确的方向来实现轮换效果。
谢谢!
答案 0 :(得分:0)
要实现某种视角,更改根视图中的m34值是不够的。该主题非常复杂,实际上需要一个特殊的托管层CATransformLayer
在这里,我发现blog article可以帮助您。在锚点中应用层语言的旋转。