Wie kann ich eine UIView umwandeln?
Frage
Ich verwende eine Core-Plot-Bibliothek, um einen Balken-Chart für meine iPhone-Anwendung zu zeichnen, und das Problem tritt auf, wenn ich versuche, dem Diagramm ein Etikett oder einige andere Ansichten hinzuzufügen.
Eigentlich ist die Ansicht, die ich hinzugefügt habe, vertikal umgezogen so was ........
Der Code ist wie
UILabel *lbl= [[UILabel alloc] initWithFrame:CGRectMake(250, 90, 70, 25)];
[lbl setBackgroundColor:[UIColor redColor]];
[lbl setText:@"HELLO"];
[self.view addSubview:lbl];
[lbl release];
Ich wage es nicht, mit Core-Plot-Bibliothek zu spielen.
Gibt es also eine andere Möglichkeit, die Dinge richtig zu machen? Sollte ich eine Transformation durchführen, bevor ich die Ansichten hinzufüge?
Wenn dies die Lösung ist, ist dies teuer, da ich mehr als eine Unteransicht hinzufügen muss.
Ich hoffe, meine Frage ist allen klar.
Lösung
Nun, es sieht so aus, als würde die Kernplot-Ansicht unter Verwendung einer CGaffinetransform invertiert. Ihre Ansicht erbt wahrscheinlich die Inversion von ihrer Übersicht. Es ist eigentlich ganz einfach zu tun,
lbl.transform = CGAffineTransformMakeScale(1,-1);
Sollte den Trick machen. Wenn Sie es oft tun müssen, vereinfachen Sie es vielleicht mit so etwas wie,
CGAffineTransform verticalFlip = CGAffineTransformMakeScale(1,-1);
lbl.transform = verticalFlip;
otherLbl.transform = verticalFlip;
etc...
Ein X-Achse-Flip wäre CGAffineTransformMakeScale(-1,1);
Andere Tipps
Um die tatsächlichen Transformationswerte zu vermeiden, können Sie versuchen zu verwenden CGAffineTransformInvert
Funktion:
lbl.transform = CGAffineTransformInvert(self.view.transform);
Wenn wir eine Ebene transformieren möchten, die ein 3D -Modell ist, müssen Sie sie wie folgt verarbeiten,
Swift 5:
// To inverse the graph vertically
annotationGraph.transform = CATransform3DMakeAffineTransform(CGAffineTransform(scaleX: 1, y: -1))
Andernfalls hätten Sie das erhalten,
Der Wert des Typs 'cgaffinetransform' kann nicht den Typ 'catransform3D' eingeben.