Par chance, si quelqu'un atterrit lors d'une recherche Google (comme je l'ai fait) et cherche à ajouter une bordure à UIImageView, recherchez la réponse par @mclin en bas. Fonctionne très bien!
Mahendra Liya
Réponses:
241
Avec OS> 3.0, vous pouvez faire ceci:
//you need this import#import <QuartzCore/QuartzCore.h>[imageView.layer setBorderColor:[[UIColor blackColor]CGColor]];[imageView.layer setBorderWidth:2.0];
Lorsque i aspectFit les images dans l'image ci-dessus, l'image est parfaitement visualisée mais les côtés de l'image sont laissés vierges, et il en va de même pour la partie supérieure et inférieure de l'image lorsque l'image est en mode paysage. L'espace vide semble moche avec une bordure définie. Avez-vous rencontré ce problème? Si oui, s'il vous plaît suggérer une méthode pour résoudre ce
Rencontre
@Hamutsi imageView.image = monImage;
Kyle Clegg
6
Oui, vous pouvez. Les instances de UIImagepeuvent être dessinées dans un contexte graphique avec CoreGraphics.
Mark Adams
Comme le souligne @rockstar, vous devrez peut-être ajouter imageView.layer.masksToBounds = YES;
Ce code produira une bordure rose autour de l'image. Cependant, si vous souhaitez simplement afficher la bordure, utilisez le calque du UIImageViewet définissez sa bordure.
Comment spécifiez-vous la largeur de la bordure souhaitée?
Patrick
16
CGContextSetLineWidth
Marcus S.Zarra
@ MarcusS.Zarra Je me rends compte qu'ils n'existaient pas lorsque cette question a été répondue, mais cette solution ne prend pas en compte l'écran Retina. Si vous pouviez le réviser, je vous serais vraiment reconnaissant :)
Luc
@lukech L'échantillon n'a pas besoin d'être révisé. Augmentez simplement la largeur de la ligne si vous utilisez un appareil Retina.
Marcus S.Zarra
2
Le sizeformat est de 320x480, que vous soyez ou non sur un appareil Retina, donc lorsque vous enregistrez l'image, il enregistre à cette résolution de 320x480px, pas 640x960.
Astuce géniale, surtout en ce qui concerne l'utilisation de la mémoire - les autres réponses prendront 2x de mémoire juste pour ajouter momentanément cette frontière. Conseil de pro - Si vous souhaitez simplement ajouter une bordure sur un côté, vous pouvez également modifier les limites. Très bonne réponse!
judepereira
11
Si vous connaissez les dimensions de votre image, alors l'ajout d'une bordure au calque d'UIImageView est la meilleure solution AFAIK. En fait, vous pouvez simplement définirFrame votre imageView sur x, y, image.size.width, image.size.height
Dans le cas où vous avez un ImageView d'une taille fixe avec des images chargées dynamiquement qui sont redimensionnées (ou mises à l'échelle à AspectFit), votre objectif est de redimensionner l'imageview à la nouvelle image redimensionnée.
Le moyen le plus court de le faire:
// 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)];
Mais pour utiliser AVMakeRectWithAspectRatioInsideRect, vous devez ajouter ceci
#import <AVFoundation/AVFoundation.h>
importation dans votre fichier et incluez également le framework AVFoundation dans votre projet (livré avec le SDK).
Vous ne pouvez pas ajouter de bordure, mais cela fonctionnerait pour le même effet. Vous pouvez également transformer l'UIView appelé blackBG dans cet exemple en une UIImageView avec une image de bordure et un milieu vide, puis vous auriez une bordure d'image personnalisée au lieu de simplement noire.
C'est ce que j'ai fini par faire; nichant mon UIImageViewau centre d'une UIViewcouleur légèrement plus grande de mon cadre.
Ben Kreeger
6
toutes ces réponses fonctionnent bien MAIS ajouter un rect à une image. Supposons que vous ayez une forme (dans mon cas un papillon) et que vous vouliez ajouter une bordure (une bordure rouge):
nous avons besoin de deux étapes: 1) prendre l'image, convertir en CGImage, passer à une fonction pour dessiner hors écran dans un contexte utilisant CoreGraphics, et rendre une nouvelle CGImage
-(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];
}
J'ai ajouté un papillon normal et un papillon plus gros bordé de rouge.
Vous pouvez manipuler l'image elle-même, mais une bien meilleure façon consiste simplement à ajouter un UIView qui contient l'UIImageView et à changer l'arrière-plan en noir. Ensuite, définissez la taille de cette vue de conteneur sur un peu plus grande que UIImageView.
Va-t-il fonctionner avec une taille d'images différente qui change à la volée? Le UIImageView changera tout le temps, et le UIView? ps Manipuler l'image elle-même sera génial.
Shay
Vous devrez ajuster le cadre de la vue contenant avec l'image - vous pouvez enregistrer les propriétés du centre pour les deux vues, ajuster la taille de l'image, ajuster la taille du conteneur, puis redéfinir les propriétés du centre pour les deux.
Kendall Helmstetter Gelner
C'est exactement comme ça que je l'ai fait plutôt que de caresser le chemin avec CG. semblait juste plus facile.
Corey Floyd
2
Une autre façon est de faire directement à partir du concepteur.
Sélectionnez votre image et allez sous "Afficher l'inspecteur d'identité".
Ici, vous pouvez ajouter manuellement des " Attributs d'exécution définis par l'utilisateur" :
J'ai créé une classe qui ajoute une bordure à imageView h. Utilisez cette classe au lieu de UIImageView. J'ai donné un remplissage de 4. Vous pouvez donner selon votre souhait.
Réponses:
Avec OS> 3.0, vous pouvez faire ceci:
la source
UIImage
peuvent être dessinées dans un contexte graphique avec CoreGraphics.Vous pouvez le faire en créant une nouvelle image (également répondu dans votre autre publication de cette question):
Ce code produira une bordure rose autour de l'image. Cependant, si vous souhaitez simplement afficher la bordure, utilisez le calque du
UIImageView
et définissez sa bordure.la source
CGContextSetLineWidth
size
format est de 320x480, que vous soyez ou non sur un appareil Retina, donc lorsque vous enregistrez l'image, il enregistre à cette résolution de 320x480px, pas 640x960.Ce code peut être utilisé pour ajouter une
UIImageView
bordure de vue.la source
la source
Si vous connaissez les dimensions de votre image, alors l'ajout d'une bordure au calque d'UIImageView est la meilleure solution AFAIK. En fait, vous pouvez simplement définirFrame votre imageView sur x, y, image.size.width, image.size.height
Dans le cas où vous avez un ImageView d'une taille fixe avec des images chargées dynamiquement qui sont redimensionnées (ou mises à l'échelle à AspectFit), votre objectif est de redimensionner l'imageview à la nouvelle image redimensionnée.
Le moyen le plus court de le faire:
Mais pour utiliser AVMakeRectWithAspectRatioInsideRect, vous devez ajouter ceci
importation dans votre fichier et incluez également le framework AVFoundation dans votre projet (livré avec le SDK).
la source
Vous ne pouvez pas ajouter de bordure, mais cela fonctionnerait pour le même effet. Vous pouvez également transformer l'UIView appelé blackBG dans cet exemple en une UIImageView avec une image de bordure et un milieu vide, puis vous auriez une bordure d'image personnalisée au lieu de simplement noire.
la source
UIImageView
au centre d'uneUIView
couleur légèrement plus grande de mon cadre.toutes ces réponses fonctionnent bien MAIS ajouter un rect à une image. Supposons que vous ayez une forme (dans mon cas un papillon) et que vous vouliez ajouter une bordure (une bordure rouge):
nous avons besoin de deux étapes: 1) prendre l'image, convertir en CGImage, passer à une fonction pour dessiner hors écran dans un contexte utilisant CoreGraphics, et rendre une nouvelle CGImage
2) convertir en uiimage et dessiner:
}
}
J'ai ajouté un papillon normal et un papillon plus gros bordé de rouge.
la source
Vous pouvez ajouter une bordure à UIImageView, puis modifier la taille de UIimageView en fonction de la taille de l'image:
Assurez-vous de définir l'origine de l'imageView au centre
la source
Vous pouvez manipuler l'image elle-même, mais une bien meilleure façon consiste simplement à ajouter un UIView qui contient l'UIImageView et à changer l'arrière-plan en noir. Ensuite, définissez la taille de cette vue de conteneur sur un peu plus grande que UIImageView.
la source
Une autre façon est de faire directement à partir du concepteur.
Sélectionnez votre image et allez sous "Afficher l'inspecteur d'identité".
Ici, vous pouvez ajouter manuellement des " Attributs d'exécution définis par l'utilisateur" :
la source
// vous devez importer
& puis pour ImageView en bordure
la source
Cette fonction vous renverra une image avec une bordure noire essayez ceci.
la source
Dans Swift 3, voici comment procéder pour l'interface utilisateur elle-même:
la source
Pour ceux qui recherchent une solution plug-and-play sur UIImage, j'ai écrit la réponse de CodyMace en tant qu'extension.
Usage:
let outlined = UIImage(named: "something")?.outline()
la source
J'ai créé une classe qui ajoute une bordure à imageView h. Utilisez cette classe au lieu de UIImageView. J'ai donné un remplissage de 4. Vous pouvez donner selon votre souhait.
la source
J'utilise cette méthode pour ajouter une bordure à l'extérieur de l'image . Vous pouvez personnaliser la largeur de la bordure en
boderWidth
constante.Swift 3
la source