/ / CATransform3D Transformation en perspective UIScrollView sur zoom (3D) - ios, uiscrollview, rotation, zoom, catransform3d

CATransform3D Transformation de perspective UIScrollView sur un zoom (3D) - ios, uiscrollview, rotation, zoom, catransform3d

J'ai essayé d'appliquer une perspectivetransformer pour obtenir un effet similaire à l'effet Apple Maps 3D avec la contrainte supplémentaire que la transformation est appliquée une fois qu'une certaine échelle de zoom a été atteinte plutôt que de cliquer sur un bouton pour activer la fonction.

Pour y parvenir, j'ai fait ce qui suit avec des résultats très bogués.

- (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;
}

Ce qui finit par arriver, c'est que la perspectivela transformation est appliquée la première fois. Cependant, il traduit également l'imageview, ce qui n'est pas ce que je veux. De plus, les tentatives de zoom suivantes continueront apparemment à tourner en utilisant la rotation précédente comme base (je pensais que définir la transformation sur la transformation d'identité réinitialiserait ce comportement).

De plus, tout indice vers la réalisation de l'effet de rotation serait très apprécié.

Simplement, ma question est la suivante: comment utiliser correctement la transformation m34 pour obtenir un effet de transformation similaire à l'effet Apple Maps 3D.

Question bonus: pouvez-vous m'orienter dans la bonne direction pour obtenir l'effet de rotation.

Merci!

Réponses:

1 pour la réponse № 1

Pour obtenir une sorte de perspective, changer la valeur m34 dans la vue racine ne suffit pas. Le sujet est assez complexe et nécessite en fait une couche d'hébergement spéciale CATransformLayer.
Ici, j'ai trouvé un article de blog cela peut vous aider. La rotation en langage de calque est appliquée au point d'ancrage.