Wenn jemand (wie ich) zufällig von einer Google-Suche hört und nach einem Rahmen für UIImageView sucht, suchen Sie unten nach der Antwort von @mclin. Funktioniert super!
Mahendra Liya
Antworten:
241
Mit OS> 3.0 können Sie dies tun:
//you need this import#import <QuartzCore/QuartzCore.h>[imageView.layer setBorderColor:[[UIColor blackColor]CGColor]];[imageView.layer setBorderWidth:2.0];
Wenn ich die Bilder in der obigen Bildansicht anpasse, wird das Bild perfekt angezeigt, aber die Seiten des Bildes bleiben leer, und dasselbe passiert mit dem oberen und unteren Teil des Bildes, wenn das Bild im Querformat ist. Die Leerstelle sieht hässlich aus, wenn der Rand darauf gesetzt ist. Haben Sie sich diesem Problem gestellt? Wenn ja, schlagen Sie bitte eine Methode vor, um dieses
Problem
@ Hamutsi imageView.image = myImage;
Kyle Clegg
6
Ja, du kannst. Instanzen von UIImagekönnen mit CoreGraphics in einen Grafikkontext gezogen werden.
Mark Adams
Wie @rockstar hervorhebt, müssen Sie möglicherweise imageView.layer.masksToBounds = YES hinzufügen.
Björn Roche
Dieser Link war die Lösung, nach der ich gesucht habe.
GrandSteph
67
Sie können dies tun, indem Sie ein neues Bild erstellen (auch in Ihrem anderen Beitrag zu dieser Frage beantwortet):
Dieser Code erzeugt einen rosa Rand um das Bild. Wenn Sie jedoch nur den Rand anzeigen möchten, verwenden Sie die Ebene von UIImageViewund legen Sie den Rand fest.
Wie legen Sie die Breite des gewünschten Rahmens fest?
Patrick
16
CGContextSetLineWidth
Marcus S. Zarra
@ MarcusS.Zarra Mir ist klar, dass sie nicht existierten, als diese Frage beantwortet wurde, aber diese Lösung berücksichtigt nicht das Retina-Display. Wenn Sie es überarbeiten könnten, wäre ich wirklich dankbar :)
Luke
@lukech Das Beispiel muss nicht überarbeitet werden. Erhöhen Sie einfach die Linienbreite, wenn Sie sich auf einem Netzhautgerät befinden.
Marcus S. Zarra
2
Das sizeist 320x480, unabhängig davon, ob Sie sich auf einem Retina-Gerät befinden oder nicht. Wenn Sie das Bild speichern, wird es mit dieser Auflösung von 320x480px und nicht mit 640x960 gespeichert.
Genialer Hack, besonders wenn es um die Speichernutzung geht - die anderen Antworten benötigen 2x Speicher, um diesen Rand vorübergehend hinzuzufügen. Profi-Tipp - Wenn Sie nur einen Rand auf einer Seite hinzufügen möchten, können Sie auch die Grenzen ändern. Gute Antwort!
Judepereira
11
Wenn Sie die Abmessungen Ihres Bildes kennen, ist das Hinzufügen eines Rahmens zur Ebene von UIImageView die beste Lösung für AFAIK. Tatsächlich können Sie Ihre Bildansicht einfach auf x, y, image.size.width, image.size.height setzen
Wenn Sie eine Bildansicht mit fester Größe und dynamisch geladenen Bildern haben, deren Größe geändert (oder auf AspectFit skaliert) wird, besteht Ihr Ziel darin, die Bildansicht auf das neue Bild mit geänderter Größe zu ändern.
Der kürzeste Weg dazu:
// containerView is my UIImageView
containerView.layer.borderWidth =7;
containerView.layer.borderColor =[UIColor colorWithRed:0.22 green:0.22 blue:0.22 alpha:1.0].CGColor;// this is the key command[containerView setFrame:AVMakeRectWithAspectRatioInsideRect(image.size, containerView.frame)];
Um AVMakeRectWithAspectRatioInsideRect zu verwenden, müssen Sie dies hinzufügen
#import <AVFoundation/AVFoundation.h>
Importieren Sie die Anweisung in Ihre Datei und fügen Sie auch das AVFoundation-Framework in Ihr Projekt ein (im Lieferumfang des SDK enthalten).
Sie können keinen Rahmen hinzufügen, dies würde jedoch für denselben Effekt funktionieren. Sie können die UIView mit dem Namen blackBG in diesem Beispiel auch in eine UIImageView mit einem Rahmenbild und einer leeren Mitte verwandeln. Dann hätten Sie einen benutzerdefinierten Bildrahmen anstelle von nur Schwarz.
Das habe ich letztendlich getan; Nesting meine UIImageViewin der Mitte einer etwas größeren UIViewmeiner Rahmenfarbe.
Ben Kreeger
6
Alle diese Antworten funktionieren gut, ABER fügen Sie einem Bild ein Rechteck hinzu. Angenommen, Sie haben eine Form (in meinem Fall einen Schmetterling) und möchten einen Rand (einen roten Rand) hinzufügen:
Wir brauchen zwei Schritte: 1) Nehmen Sie das Bild, konvertieren Sie es in CGImage, übergeben Sie es an eine Funktion, um mit CoreGraphics außerhalb des Bildschirms in einem Kontext zu zeichnen, und geben Sie ein neues CGImage zurück
-(void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.CGRect frame =CGRectMake(0,0,160,122);UIImage* img =[UIImage imageNamed:@"butterfly"];// take low res OR high res, but frame should be the low-res one.
imgV =[[UIImageView alloc]initWithFrame:frame];[imgV setImage: img];
imgV.center = self.view.center;[self.view addSubview: imgV];
frame.size.width = frame.size.width *1.3;
frame.size.height = frame.size.height*1.3;CGImageRef cgImage =[ViewController createResizedCGImage:[img CGImage] toWidth:frame.size.width andHeight: frame.size.height ];
imgV2 =[[UIImageView alloc]initWithFrame:frame];[imgV2 setImage:[UIImage imageWithCGImage:cgImage]];// release:if(cgImage)CGImageRelease(cgImage);[self.view addSubview: imgV2];
}}
Ich fügte einen normalen Schmetterling und einen rot umrandeten größeren Schmetterling hinzu.
Sie können das Bild selbst bearbeiten. Eine viel bessere Möglichkeit besteht darin, einfach eine UIView hinzuzufügen, die die UIImageView enthält, und den Hintergrund in Schwarz zu ändern. Stellen Sie dann die Größe dieser Containeransicht etwas größer als die UIImageView ein.
Funktioniert es mit einer anderen Größe von Bildern, die sich im laufenden Betrieb ändern? Das UIImageView ändert sich ständig, und das UIView? ps Das Bild selbst zu manipulieren ist großartig.
Shay
Sie müssten den Rahmen der enthaltenen Ansicht zusammen mit dem Bild anpassen. Sie könnten die Center-Eigenschaften für beide Ansichten speichern, die Bildgröße anpassen, die Containergröße anpassen und dann die Center-Eigenschaften für beide Ansichten zurücksetzen.
Kendall Helmstetter Gelner
Dies ist genau die Art und Weise, wie ich es getan habe, anstatt den Weg mit CG zu streicheln. schien einfach einfacher.
Corey Floyd
2
Eine andere Möglichkeit ist, direkt vom Designer zu tun.
Wählen Sie Ihr Bild aus und gehen Sie unter "Identitätsinspektor anzeigen".
Hier können Sie manuell " Benutzerdefinierte Laufzeitattribute" hinzufügen :
Ich habe eine Klasse erstellt, die imageView h einen Rahmen hinzufügt. Verwenden Sie diese Klasse anstelle von UIImageView. Ich habe eine Auffüllung von 4 angegeben. Sie können nach Ihren Wünschen angeben.
Antworten:
Mit OS> 3.0 können Sie dies tun:
quelle
UIImage
können mit CoreGraphics in einen Grafikkontext gezogen werden.Sie können dies tun, indem Sie ein neues Bild erstellen (auch in Ihrem anderen Beitrag zu dieser Frage beantwortet):
Dieser Code erzeugt einen rosa Rand um das Bild. Wenn Sie jedoch nur den Rand anzeigen möchten, verwenden Sie die Ebene von
UIImageView
und legen Sie den Rand fest.quelle
CGContextSetLineWidth
size
ist 320x480, unabhängig davon, ob Sie sich auf einem Retina-Gerät befinden oder nicht. Wenn Sie das Bild speichern, wird es mit dieser Auflösung von 320x480px und nicht mit 640x960 gespeichert.Dieser Code kann zum Hinzufügen eines
UIImageView
Ansichtsrahmens verwendet werden.quelle
quelle
Wenn Sie die Abmessungen Ihres Bildes kennen, ist das Hinzufügen eines Rahmens zur Ebene von UIImageView die beste Lösung für AFAIK. Tatsächlich können Sie Ihre Bildansicht einfach auf x, y, image.size.width, image.size.height setzen
Wenn Sie eine Bildansicht mit fester Größe und dynamisch geladenen Bildern haben, deren Größe geändert (oder auf AspectFit skaliert) wird, besteht Ihr Ziel darin, die Bildansicht auf das neue Bild mit geänderter Größe zu ändern.
Der kürzeste Weg dazu:
Um AVMakeRectWithAspectRatioInsideRect zu verwenden, müssen Sie dies hinzufügen
Importieren Sie die Anweisung in Ihre Datei und fügen Sie auch das AVFoundation-Framework in Ihr Projekt ein (im Lieferumfang des SDK enthalten).
quelle
Sie können keinen Rahmen hinzufügen, dies würde jedoch für denselben Effekt funktionieren. Sie können die UIView mit dem Namen blackBG in diesem Beispiel auch in eine UIImageView mit einem Rahmenbild und einer leeren Mitte verwandeln. Dann hätten Sie einen benutzerdefinierten Bildrahmen anstelle von nur Schwarz.
quelle
UIImageView
in der Mitte einer etwas größerenUIView
meiner Rahmenfarbe.Alle diese Antworten funktionieren gut, ABER fügen Sie einem Bild ein Rechteck hinzu. Angenommen, Sie haben eine Form (in meinem Fall einen Schmetterling) und möchten einen Rand (einen roten Rand) hinzufügen:
Wir brauchen zwei Schritte: 1) Nehmen Sie das Bild, konvertieren Sie es in CGImage, übergeben Sie es an eine Funktion, um mit CoreGraphics außerhalb des Bildschirms in einem Kontext zu zeichnen, und geben Sie ein neues CGImage zurück
2) konvertiere zu uiimage zurück und zeichne:
}}
}}
Ich fügte einen normalen Schmetterling und einen rot umrandeten größeren Schmetterling hinzu.
quelle
Sie können der UIImageView einen Rahmen hinzufügen und dann die Größe der UIimageView entsprechend der Bildgröße ändern:
Stellen Sie sicher, dass Sie den Ursprung der Bildansicht auf die Mitte setzen
quelle
Sie können das Bild selbst bearbeiten. Eine viel bessere Möglichkeit besteht darin, einfach eine UIView hinzuzufügen, die die UIImageView enthält, und den Hintergrund in Schwarz zu ändern. Stellen Sie dann die Größe dieser Containeransicht etwas größer als die UIImageView ein.
quelle
Eine andere Möglichkeit ist, direkt vom Designer zu tun.
Wählen Sie Ihr Bild aus und gehen Sie unter "Identitätsinspektor anzeigen".
Hier können Sie manuell " Benutzerdefinierte Laufzeitattribute" hinzufügen :
quelle
// Sie müssen importieren
& dann für ImageView im Rahmen
quelle
Diese Funktion gibt Ihnen ein Bild mit schwarzem Rand zurück. Versuchen Sie dies. Ich hoffe, dies wird Ihnen helfen
quelle
In Swift 3 machen Sie Folgendes mit dem UIImage selbst:
quelle
Für diejenigen, die nach einer Plug-and-Play-Lösung für UIImage suchen, habe ich die Antwort von CodyMace als Erweiterung geschrieben.
Verwendung:
let outlined = UIImage(named: "something")?.outline()
quelle
Ich habe eine Klasse erstellt, die imageView h einen Rahmen hinzufügt. Verwenden Sie diese Klasse anstelle von UIImageView. Ich habe eine Auffüllung von 4 angegeben. Sie können nach Ihren Wünschen angeben.
quelle
Ich benutze diese Methode, um einen Rand außerhalb des Bildes hinzuzufügen . Sie können die Rahmenbreite
boderWidth
konstant anpassen .Swift 3
quelle