Sar*_*glt 38 iphone storyboard uiimageview ios
我想实现:
UIImageView使图像不符合边缘UIImageView底线:我希望增加触摸区域,UIImageView而不会将图像拉伸超过一定的尺寸.
是否可以通过故事板?如果没有,任何人都可以通过编程方式告诉他们如何做
我可以UIButton通过故事板设置图像插图来实现类似的功能,但我找不到任何这样的东西UIImageView.
Bum*_*Koo 44
您可以添加插入UIImage而不是UIImageView.
斯威夫特4
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFill
imageView.image = UIImage(named: "example")?.withAlignmentRectInsets(UIEdgeInsets(top: -4, left: 0, bottom: -4, right: 0))
Run Code Online (Sandbox Code Playgroud)
Sar*_*glt 28
使用此处给出的方法:
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];
Run Code Online (Sandbox Code Playgroud)
现在你的插图变成100-80即20.
这是一种为UIImageView提供插件的解决方法.欢迎更好的答案.
Mar*_*Him 23
看起来你想要一个可触摸的imageView,为什么不使用带图像和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];
Run Code Online (Sandbox Code Playgroud)
sht*_*kgm 11
我的密码
迅捷4
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
}()
Run Code Online (Sandbox Code Playgroud)
尝试了一段时间后,我找到了这个解决方案:
extension UIImage {
func withInset(_ insets: UIEdgeInsets) -> UIImage? {
let cgSize = CGSize(width: self.size.width + insets.left * self.scale + insets.right * self.scale,
height: self.size.height + insets.top * self.scale + insets.bottom * self.scale)
UIGraphicsBeginImageContextWithOptions(cgSize, false, self.scale)
defer { UIGraphicsEndImageContext() }
let origin = CGPoint(x: insets.left * self.scale, y: insets.top * self.scale)
self.draw(at: origin)
return UIGraphicsGetImageFromCurrentImageContext()?.withRenderingMode(self.renderingMode)
}
}
Run Code Online (Sandbox Code Playgroud)
let margin:CGFloat = 16
self.imageView.image = image?.withInset(UIEdgeInsets(top: margin, left: margin, bottom: margin, right: margin))
Run Code Online (Sandbox Code Playgroud)
一种选择是使用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
}
Run Code Online (Sandbox Code Playgroud)
产生以下结果:
您可以添加UIView,然后再添加你的UIImageView内UIView用任何你喜欢的填充,如果你希望你的姿态,只有在得到受影响UIImageView,使其UserInteractionEnable为yes或者,如果你想的手势是整个然后你可以将手势添加到整体UIView