如何解决缩小图像,将其添加为视图层的内容
我想将图像设置为视图的内容,但是我不希望图像占据整个画面。我希望图像变小。为此,我试图将contentRect设置为主层的80%。
self.layer.contents = UIImage(named: "plus")?.cgImage
self.layer.contentsRect = self.layer.frame.insetBy(dx: 5,dy: 5)
但这不起作用。调试后,我意识到该层的框架是
▿ (256.0,398.0,100.0,100.0)
和contectsRect是
▿ (261.0,403.0,90.0,90.0)
但是它仍然不能解决问题,这意味着图像不会变小。谁能告诉我如何解决此问题。
解决方法
这是一种方法。
- 子类
UIView
- 添加“图像”
CALayer
作为子层 - 在
layoutSubviews()
中设置图像图层的内容和框架(或添加您自己的功能来设置图像图层的内容)
示例代码:
class Image80View: UIView {
let imgLayer = CALayer()
var img: UIImage?
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
func commonInit() -> Void {
layer.addSublayer(imgLayer)
}
override func layoutSubviews() {
super.layoutSubviews()
if let img = self.img {
imgLayer.contents = img.cgImage
}
// 10% on each side,so 80% of view
imgLayer.frame = bounds.insetBy(dx: bounds.width * 0.1,dy: bounds.height * 0.1)
}
}
class TestViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let testView = Image80View()
testView.translatesAutoresizingMaskIntoConstraints = false
if let img = UIImage(named: "plus") {
testView.img = img
}
view.addSubview(testView)
NSLayoutConstraint.activate([
testView.widthAnchor.constraint(equalToConstant: 200.0),testView.heightAnchor.constraint(equalTo: testView.widthAnchor),testView.centerXAnchor.constraint(equalTo: view.centerXAnchor),testView.centerYAnchor.constraint(equalTo: view.centerYAnchor),])
// so we see the view's frame
testView.backgroundColor = .green
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。