Wie zu skalieren (zoom) ein UIView zu einem bestimmten CGPoint
Habe ich viel Zeit damit verbracht, zu versuchen, einen Weg zu finden zu bedienen CGAffineScale zu verwandeln, eine Ansicht zu einem bestimmten Zeitpunkt, einschließlich Herumspielen mit Anker-Punkte, verschieben Sie das Zentrum der Ansicht vor und nach der Umwandlung und umfassende Googeln. Ich bin mir bewusst, das wäre viel einfacher mit einem UIScrollview; aber ich weiß, dass es technisch möglich ist, zu verzichten, und es ist ein Splitter in meinem Kopf.
Diese Antwort bekommt bemerkenswert nahe an dem, was ich erreichen möchte, aber die Antwort gibt nur details, wie zum Zoomen in eine bestimmte Ecke (anstatt einem Punkt) durch geschickte verschieben von der Mitte zu der Ecke gegenüber, die Sie wollen, zu vergrößern.
Wie kann ich ändern, mvds' code zu skalieren UIView zu einem bestimmten Zeitpunkt in einer UIView?
CGFloat s = 3;
CGAffineTransform tr = CGAffineTransformScale(self.view.transform, s, s);
CGFloat h = self.view.frame.size.height;
CGFloat w = self.view.frame.size.width;
[UIView animateWithDuration:2.5 delay:0 options:0 animations:^{
self.view.transform = tr;
self.view.center = CGPointMake(w-w*s/2,h*s/2);
} completion:^(BOOL finished) {}];
InformationsquelleAutor glenstorey | 2013-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es 2 Schritte: Zuerst vergrößern Sie die Ansicht, die Sie wollen, um zu Zoomen. Anschließend legen Sie die Mitte dieser gesprengt anzeigen, so dass der Teil, den Sie möchten, um zu sehen, endet in der Mitte der Ansicht.
Zeichnen Sie diese auf Papier und die Formeln Folgen: (ungetestet)
InformationsquelleAutor mvds
Ich tatsächlich lief in dieser gleichen problem selber. Um es zu beheben, alles, was ich Tat, war ändern Sie den Ankerpunkt der Ansicht war ich die Skalierung, da CGAffineTransforms durchgeführt werden, auf die Ansicht in relation zum Verankerungspunkt, also je nachdem, wo der Ankerpunkt ist, wird die Transformation skalieren, versetzen oder drehen Sie die Ansicht anders. Hier ist die grundlegende Idee:
CATransform3D scaleTransform3D = CATransform3DMakeScale(scaleFactorX, scaleFactorY, 1.0);
("Ansicht".Schicht.verwandeln musste CATransform3D). Was jetzt passiert, ist die Ansicht springt, so dass derpointToScaleTo
ist in der Mitte (das ist nicht ideal - das ideal, ich würde wollen, um zu vergrößern bis zu dem Punkt, anstatt zu springen, dann zoom-in) und dreht sich dann -90º. Ich bin mir nicht sicher, wo ich bin immer die die rotation aus. Wissen Sie, wie um es zu vergrößern bis zu dem Punkt, anstatt springen und dann zoom?Sie können konvertieren die affine transformation in eine
CATransform3D
mitself.view.layer.transform = CATransform3DMakeAffineTransform(scaleTransform);
.InformationsquelleAutor pasawaya