web-dev-qa-db-ja.com

UIImageViewへのインセット?

私は達成したい:

  • 画像ビューの塗りつぶしモードに拡大縮小
  • 画像がUIImageViewの端に合わないようにUIImageViewにインセットします

結論:画像を特定のサイズ以上に引き伸ばさずに、UIImageViewのタッチ領域を増やしたいです。

絵コンテを通して可能ですか?誰もプログラムでそれを行う方法を教えてくれないのですか?

UIButtonを介して同様の機能を実現し、ストーリーボードを介して画像インセットを設定することはできますが、UIImageViewを使用してそのようなことを見つけることはできません。

37
Sarasranglt

指定されたメソッドを使用して here

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];

これで、インセットは100〜80、つまり20になります。

これは、UIImageViewにインセットを提供する回避策です。より良い回答を歓迎します。

27
Sarasranglt

UIImageの代わりにUIImageViewにインセットを追加できます。

Swift 4

let imageView = UIImageView() 
imageView.contentMode = .scaleAspectFill
imageView.image = UIImage(named: "example")?.withAlignmentRectInsets(UIEdgeInsets(top: -4, left: 0, bottom: -4, right: 0))
39
BumMo Koo

タッチ可能なimageViewが必要なように見えるので、imageとimageEdgeInsetsでUIButtonを使用しないのはなぜですか?

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];
21
MarkHim

私のコード

  • マイナスインセット:小さい画像
  • 挿入図:大きな画像

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
}()
9
Shota Nakagami

このようにUIView内でUIImageを回避してみてください。

enter image description here

4
Ionz

最初にUIViewを追加してから、UIImageView内にUIViewを好きなように追加して追加できます。また、ジェスチャーをUIImageViewでのみ影響させる場合は、UserInteractionEnableをyesにするか、ジェスチャーを全体の場合、ジェスチャーをUIView全体に追加できます

4
Saheb Roy

1つのオプションはwithAlignmentRectInsetsを使用することですが、レイヤーの境界線では機能しません。

別の方法は、小さな画像に正のインセット値を使用する場合にresizableImage(withCapInsets: resizingMode: .stretch)を使用することです。

サンプルコード:

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
}

次の結果を生成します。

UIImageView with a border and padded inset

1
Nikolay Derkach