这是为了未来观众的一般性答案。它基于问题标题而不是原始问题的详细信息。
如何将 UIImage 添加到 CALayer
您可以将图像添加到视图中layer
只需使用其contents
财产:
myView.layer.contents = UIImage(named: "star")?.cgImage
如果您想将图像添加到其自己的图层中,可以这样做:
let myLayer = CALayer()
let myImage = UIImage(named: "star")?.cgImage
myLayer.frame = myView.bounds
myLayer.contents = myImage
myView.layer.addSublayer(myLayer)
修改外观
上面的代码会生成这样的视图。浅蓝色的是UIView
深蓝色的星星是UIImage
.
但正如您所看到的,它看起来像素化。这是因为UIImage
小于UIView
因此它会被缩放以填充视图,这是默认值,如果您没有指定任何其他内容。
下面的示例显示了图层的变化contentsGravity
财产。代码如下所示:
myView.layer.contents = UIImage(named: "star")?.cgImage
myView.layer.contentsGravity = kCAGravityTop
myView.layer.isGeometryFlipped = true
在 iOS 中,您可能需要设置isGeometryFlipped财产 https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CALayer_class/#//apple_ref/occ/instp/CALayer/geometryFlipped to true
如果你用顶部或底部重力做任何事情,否则它会与你期望的相反。 (仅垂直翻转重力,而不是内容渲染。如果您在翻转内容时遇到问题,请参阅这个答案 https://stackoverflow.com/a/34407999/3681880.)
那里有两个UIView
下面的例子适用于每个contentsGravity
设置,一个视图大于UIImage
另一个较小。这样您就可以看到缩放和重力的影响。
kCAGravityResize
这是默认设置。
kCAGravityResizeAspect
kCAGravityResizeAspectFill
kCAGravityCenter
kCAGravityTop
kCAGravityBottom
kCAGravityLeft
kCAGravityRight
kCAGravityTopLeft
kCAGravityTopRight
kCAGravityBottomLeft
kCAGravityBottomRight
Related
- 视图的内容模式属性 https://stackoverflow.com/a/32151862/3681880
- 画一个UIImage in drawRect with CGContextDrawImage https://stackoverflow.com/a/34407999/3681880
- CALayer 教程:入门 http://www.raywenderlich.com/90488/calayer-in-ios-with-swift-10-examples