/ / CATransform3D UIScrollView perspektívna transformácia pri priblížení (3D) - ios, uiscrollview, rotácia, zväčšenie, catransform3d

CATransform3D UIScrollView perspektívna transformácia na zväčšenie (3D) - ios, uiscrollview, rotácia, zoom, catransform3d

Snažil som sa uplatniť perspektívutransformáciou dosiahnete efekt podobný efektu Apple Maps 3D s pridaným obmedzením, že transformácia sa použije skôr, ako sa dosiahne určitá mierka zväčšenia, namiesto toho, aby ste funkciu povolili kliknutím na tlačidlo.

Aby som to dosiahol, robil som nasledujúce s veľmi chybnými výsledkami.

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

Nakoniec sa stane to, že perspektívatransformácia sa použije prvýkrát. Prekladá však aj obraz, čo nie je to, čo chcem. Tiež nasledujúce pokusy o zväčšenie budú zdanlivo pokračovať v rotácii pomocou predchádzajúcej rotácie ako základne (myslel som si, že nastavenie transformácie na transformáciu identity toto správanie vynuluje).

Tiež by sa veľmi ocenili akékoľvek ukazovatele smerujúce k dosiahnutiu efektu rotácie.

Jednoducho, moja otázka znie: Ako môžem správne použiť transformáciu m34 na dosiahnutie efektu transformácie podobného efektu Apple Maps 3D.

Bonusová otázka: Môžete ma nasmerovať správnym smerom na dosiahnutie efektu rotácie.

Vďaka!

odpovede:

1 pre odpoveď č. 1

Na dosiahnutie určitého druhu perspektívy nestačí zmena hodnoty m34 v koreňovom zobrazení. Téma je pomerne zložitá a vyžaduje v skutočnosti špeciálnu vrstvu hostenia CATransformLayer.
Tu som našiel a blog článok to ti môže pomôcť. V bode ukotvenia sa použije rotácia v jazyku vrstvy.