Wie Maske ein quadratisches Bild in ein Bild mit Runden Ecken in iOS?
Wie können Sie die Maske ein quadratisches Bild in ein Bild mit Runden Ecken?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie können Sie die Maske ein quadratisches Bild in ein Bild mit Runden Ecken?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie verwenden, CoreGraphics, um einen Weg für ein abgerundetes Rechteck, das mit diesem code-snippet:
Dann rufen Sie CGContextClip(context); clip es auf das Rechteck Weg. Jetzt eine Zeichnung gemacht, einschließlich der Zeichnung ein Bild wird abgeschnitten, um das Runde Rechteck-Form.
Als ein Beispiel, davon ausgehend, "Bild" ist ein UIImage, und dies ist in drawRect: - Methode:
Hier ist eine noch einfachere Methode, die verfügbar ist in iPhone 3.0 und bis. Jedes View-basierten Objekt hat einen zugeordneten Ebene. Jede Schicht kann ein Eckenradius set, dies wird Ihnen nur, was Sie wollen:
Um diese Methoden verwenden, müssen Sie möglicherweise:
Ich weiß, dies ist eine alte Nachricht, aber nur, um zu Kochen es ein wenig nach unten:
Gibt es zwei mögliche Fragen hier: (1) wie bewerbe ich mich abgerundeten Ecken, um eine UIView (wie ein UIImageView), die auf dem Bildschirm angezeigt werden, und (2) wie kann ich die Maske ein quadratisches Bild (das heißt, dass ein UIImage) zu erzeugen, um ein neues Bild mit abgerundeten Ecken.
Für (1), der einfachste Weg ist die Verwendung von CoreAnimation und legen Sie die Ansicht.Schicht.cornerRadius-Eigenschaft
For (2), der beste Weg ist die Nutzung der UIKit-Grafik-Operationen:
Was ist schwierig zu problem (2) ist, dass Sie vielleicht denken, Sie könnten die ganze operation mit der Ansicht.Schicht.mask-Eigenschaft in CoreAnimation. Aber Sie können nicht, weil die CALayer
renderInContext:
Methode, die Sie verwenden würden, um erzeugen ein UIImage von der maskierten Ebene, scheint zu ignorieren, die Maske. Schlimmer ist, dass die Dokumentation fürrenderInContext:
nicht erwähnen, und nur eine Anspielung auf das Verhalten für OSX 10.5.Einige weitere Kontext: die obigen Ansatz (2) ist mit UIKit ist Wrapper um mehr basic CoreGraphics Funktionalität. Sie können das gleiche tun mit der CoreGraphics Aufrufe direkt – das ist das, was die gewählte Antwort zu tun-aber dann müssen Sie bauen das abgerundete Rechteck Bézier-Pfad manuell aus Kurven und Linien, und Sie müssen auch einen Ausgleich für die Tatsache, dass CoreGraphics verwendet eine Zeichnung, Koordinatensystem, welches gespiegelt wird, mit Bezug auf UIKit ist.
Finden Sie in diesem Beitrag - Sehr einfache Antwort
Wie Sie festlegen, Runde Ecken im UI-Bilder in iphone
Sehr einfach.
selbst.profileImageView.Schicht.cornerRadius = selbst.profileImageView.frame.Größe.- Breite /2;
selbst.profileImageView.clipsToBounds = JA;
Für jede Ansicht gibt es eine gebündelte layer-Eigenschaft. Also die erste Zeile der oben ist um die Ecke-radius um das layer-Objekt (d.h. eine Instanz der Klasse CALayer). Um ein rundes Bild von einem quadratischen Bild, das den radius festgelegt ist, um die Hälfte der Breite des UIImageView. Zum Beispiel, wenn die Breite der quadrierten Bild ist 100 Pixel. Der radius ist 50 Pixel. Zweitens, müssen Sie die clipsToBounds-Eigenschaft auf JA, um die Schicht funktioniert.
Sowohl die Methoden der Arbeit, aber auch die Unterschiede zeigt sich, je nachdem, wo Sie es verwenden.
Für Ex: Wenn Sie eine Tabelle anzeigen mit den Zellen zeigen ein Bild zusammen mit anderen labels, etc., und verwenden Sie layer, um die cornerRadius, das scrollen dauert ein großer hit. Es rucklig.
Stand ich vor diesem Problem, wenn ich mit Layer für ein Bild in eine table view cell und versuchte herauszufinden, die Ursache, dass holpern, nur um festzustellen, dass CALayer der übeltäter war.
Verwendet die erste Lösung ist, tun die Sachen in drawRect erklärt NilObject. Das funktioniert wie ein Charme mit scrollen glatt wie Seide.
Auf der anderen Seite, wenn Sie verwenden möchten diese in statische Ansichten wie popover view, etc., Schicht ist der einfachste Weg, es zu tun.
Wie gesagt, beide Methoden funktionieren gut nur, dass Sie brauchen, um zu entscheiden, basierend auf, wo Sie es verwenden möchten.
Ich diese Methode verwenden.
UIGraphicsGetImageFromCurrentImageContext
muss nicht beibehalten werden, so würden Sie undicht Speicher es. Es ist der AufruferimageWithColor
muss beibehalten werden. Vielleicht haben Sie das beibehalten, weil derNSAutoreelasePool
(die scheint auch verdächtig)?Gebäude aus der Algen, hier sind ein paar Methoden, die schön sind, in eine Kategorie UIImage: