130 Stimmen

Wie kann ich ein UII-Bild mit einem schwarzen Rand versehen?

Wie kann ich den Rand eines UIImage ?

0 Stimmen

Durch Zufall, wenn jemand durch eine Google-Suche zu hören (wie ich) und sind auf der Suche nach dem Hinzufügen einer Grenze zu UIImageView, suchen Sie nach der Antwort von @mclin am unteren Rand. Funktioniert prima!

8voto

Andrew Johnson Punkte 12508

Sie können keinen Rahmen hinzufügen, aber das würde den gleichen Effekt erzielen. Sie könnten auch die UIView namens blackBG in diesem Beispiel in eine UIImageView mit einem Randbild und einer leeren Mitte umwandeln, und dann hätten Sie einen benutzerdefinierten Bildrand anstelle von nur schwarz.

UIView *blackBG = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];

blackBG.backgroundColor = [UIColor blackColor];

UIImageView *myPicture = [[UIImageView alloc] initWithImage:
                          [UIImage imageNamed: @"myPicture.jpg"]];

int borderWidth = 10;

myPicture.frame = CGRectMake(borderWidth,
                             borderWidth,
                             blackBG.frame.size.width-borderWidth*2,
                             blackBG.frame.size.height-borderWidth*2)];

[blackBG addSubview: myPicture];

0 Stimmen

Das habe ich schließlich getan; ich verschachtelte meine UIImageView in der Mitte eines etwas grösseren UIView der Farbe meines Rahmens.

6voto

ingconti Punkte 9854

Alle diese Antworten funktionieren gut, ABER fügen Sie ein Rect zu einem Bild hinzu. Angenommen, Sie haben eine Form (in meinem Fall einen Schmetterling) und möchten einen Rahmen hinzufügen (einen roten Rahmen):

brauchen wir zwei Schritte: 1) das Bild nehmen, in CGImage konvertieren, an eine Funktion zum Zeichnen außerhalb des Bildschirms in einem Kontext mit CoreGraphics übergeben und ein neues CGImage zurückgeben

2) zurück nach uiimage konvertieren und zeichnen:

// remember to release object!
+ (CGImageRef)createResizedCGImage:(CGImageRef)image toWidth:(int)width
andHeight:(int)height
{
// create context, keeping original image properties
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, width,
                                             height,
                                             8
                                             4 * width,
                                             colorspace,
                                             kCGImageAlphaPremultipliedFirst
                                             );

 CGColorSpaceRelease(colorspace);

if(context == NULL)
    return nil;

// draw image to context (resizing it)
CGContextSetInterpolationQuality(context, kCGInterpolationDefault);

CGSize offset = CGSizeMake(2,2);
CGFloat blur = 4;   
CGColorRef color = [UIColor redColor].CGColor;
CGContextSetShadowWithColor ( context, offset, blur, color);

CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
// extract resulting image from context
CGImageRef imgRef = CGBitmapContextCreateImage(context);
CGContextRelease(context);
return imgRef;

}

- (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 habe einen normalen Schmetterling und einen rot umrandeten größeren Schmetterling hinzugefügt.

0 Stimmen

Gibt es eine Möglichkeit, die Breite des roten Rahmens hier einzustellen?

5voto

poleB Punkte 71

Sie können der UIImageView einen Rahmen hinzufügen und dann die Größe der UIimageView entsprechend der Bildgröße ändern:

#import <QuartzCore/QuartzCore.h>

// adding border to the imageView
[imageView.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];

// resize the imageView to fit the image size
CGSize size = [image size];
float factor = size.width / self.frame.size.width;
if (factor < size.height / self.frame.size.height) {
    factor = size.height / self.frame.size.height;
}

CGRect rect = CGRectMake(0, 0, size.width/factor, size.height/factor);
imageView.frame = rect;

Stellen Sie sicher, dass Sie den Ursprung der imageView auf die Mitte setzen

2voto

Sie könnten das Bild selbst manipulieren, aber ein viel besserer Weg ist, einfach eine UIView hinzuzufügen, die die UIImageView enthält, und den Hintergrund auf schwarz zu ändern. Dann setzen Sie die Größe dieser Container-Ansicht auf ein wenig größer als die UIImageView.

0 Stimmen

Wird es mit einer unterschiedlichen Größe der Bilder, die auf der Fliege ändern zu arbeiten? Die UIImageView wird die ganze Zeit ändern, und die UIView? p.s. Manipulieren Sie das Bild selbst wird groß sein.

0 Stimmen

Sie müssten den Rahmen der enthaltenden Ansicht zusammen mit dem Bild anpassen - Sie könnten die Zentrierungseigenschaften für beide Ansichten speichern, die Bildgröße anpassen, die Containergröße anpassen und dann die Zentrierungseigenschaften für beide neu einstellen.

0 Stimmen

Das ist genau die Art und Weise, wie ich es gemacht habe, im Gegensatz zum Streicheln des Pfades mit CG. schien einfach einfacher.

2voto

Luca Davanzo Punkte 19769

Eine andere Möglichkeit ist, direkt vom Designer zu arbeiten.

Wählen Sie Ihr Bild aus und gehen Sie auf "Identitätsinspektor anzeigen".

Hier können Sie manuell hinzufügen " Benutzerdefinierte Laufzeitattribute" :

layer.borderColor
layer.borderWidth

enter image description here

1 Stimmen

Dies wird nicht funktionieren, da Sie CGColor benötigen und durch XIB es nur UIColor

0 Stimmen

Farbe wird nicht funktionieren, aber wenn Sie nur ein schwarzes brauchen - das ist die effizienteste "Zeilen Code" Antwort =D

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X