使用addSublayer添加带图片的CALayer无法在UIImageView中显示求助
解决CALayer图片不显示的问题
嘿,我之前也踩过这个一模一样的坑!你代码里的问题其实很关键——CALayer的contents属性要求传入的是CGImage类型,而不是UIImage对象。CAGradientLayer能正常工作是因为它不需要依赖contents,是自己内部绘制渐变的,而普通CALayer就吃这个细节的亏啦。
修复后的代码
只需要把UIImage转成CGImage传给contents就行,另外最好加个可选值判断,避免图片为空时的崩溃:
let strokeLayer = CALayer() // 转成CGImage传入contents if let image = UIImage(named: "test.png")?.cgImage { strokeLayer.contents = image } strokeLayer.frame = testImageView.bounds // 用bounds比frame更稳妥,因为是相对于父layer的坐标 testImageView.layer.addSublayer(strokeLayer)
额外注意事项
- 我把
testImageView.frame换成了testImageView.bounds,因为子layer的frame是相对于父layer(也就是testImageView的layer)的,用bounds能确保完全铺满父视图,避免因为父视图位置偏移导致的显示问题。 - 如果你的
testImageView是用Auto Layout布局的,那在viewDidLoad里获取的frame可能不是最终布局后的尺寸,这时候你需要把设置layer frame的代码放到viewDidLayoutSubviews()方法里,确保拿到正确的视图尺寸。 - 再确认下图片是否真的在你的项目资源里:比如是不是放在Assets.xcassets中,或者有没有勾选正确的target membership。
内容的提问来源于Stack Exchange,提问作者为匿名用户
相关产品推荐
相关产品推荐

