Je voudrais réaliser:
UIImageView
pour que l'image ne rencontre pas les bords du UIImageView
Bottomline: Je veux augmenter la zone tactile du UIImageView
sans étirer l'image au-delà d'une certaine taille.
Est-ce possible par le storyboard? Sinon, est-ce que quelqu'un peut dire comment le faire par programme?
Je peux obtenir des fonctionnalités similaires avec UIButton
et en insérant une image dans le storyboard, mais je ne trouve rien de tel avec UIImageView
.
En utilisant la méthode donnée ici :
UIImage *image= [MyUtil imageWithImage:[UIImage imageNamed:@"MyImage"] scaledToSize:CGSizeMake(80, 80)];
UIImageView* imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
imgView.contentMode = UIViewContentModeCenter;
[imgView setImage:image];
Maintenant, vos incrustations deviennent 100-80, à savoir 20.
Il s'agit d'une solution de contournement pour fournir des encarts à un UIImageView. De meilleures réponses sont les bienvenues.
Vous pouvez ajouter un insert à UIImage
au lieu de UIImageView
.
Swift 4
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFill
imageView.image = UIImage(named: "example")?.withAlignmentRectInsets(UIEdgeInsets(top: -4, left: 0, bottom: -4, right: 0))
On dirait que vous voulez avoir une imageView tactile, alors pourquoi ne pas utiliser un UIButton avec image et imageEdgeInsets?
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
[b setFrame:someFrame];
[b setImage:img forState:UIControlStateNormal];
b.imageEdgeInsets = UIEdgeInsetsMake(20, 20, 20, 20);
[b addTarget:self action:@selector(imageClicked:) forControlEvents:UIControlEventTouchUpInside];
Mon code
Swift4
private lazy var imageView: UIImageView = {
let view = UIImageView()
view.contentMode = .scaleAspectFit
let insetValue: CGFloat = -8
view.image = image.withAlignmentRectInsets(UIEdgeInsets(top: insetValue, left: insetValue, bottom: insetValue, right: insetValue))
return view
}()
Vous pouvez d'abord ajouter un UIView
, puis votre UIImageView
à l'intérieur du UIView
avec un remplissage de ce que vous voulez, et si vous souhaitez que votre geste soit affecté uniquement dans UIImageView
, définissez UserInteractionEnable sur yes ou si vous souhaitez que le geste soit complet, vous pouvez l'ajouter à l'ensemble UIView
Une option consiste à utiliser withAlignmentRectInsets
, mais cela ne fonctionne pas avec la bordure de la couche.
Une autre méthode consiste à utiliser resizableImage(withCapInsets: resizingMode: .stretch)
où vous souhaitez utiliser des valeurs d’encart positives pour des images plus petites.
Exemple de code:
private func setupQRImageView() -> UIImageView {
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFit
imageView.layer.borderColor = Default.imageBorderColor.cgColor
imageView.layer.borderWidth = 4.0
imageView.layer.cornerRadius = 6.0
let imageInset: CGFloat = 8.0
imageView.image = UIImage(named: "QR")?.resizableImage(withCapInsets: UIEdgeInsets(top: imageInset, left: imageInset, bottom: imageInset, right: imageInset), resizingMode: .stretch)
return imageView
}
Produit le résultat suivant: