如何在SwiftUI中显示整个CALayer内容? [英] How could I display the entire CALayer content in the SwiftUI?
本文介绍了如何在SwiftUI中显示整个CALayer内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的代码非常简单,如下所示:
My code is very simple as follow:
import PocketSVG
import SwiftUI
struct SVGImage: UIViewRepresentable {
var SVGName: String?
var tintStrokeColor: CGColor?
var tintFillColor: CGColor?
func makeUIView(context: Context) -> UIView {
return UIView()
}
func updateUIView(_ view: UIView, context: Context) {
let svgURL = Bundle.main.url(forResource: "tiger", withExtension: "svg")!
let paths = SVGBezierPath.pathsFromSVG(at: svgURL)
let layer = CALayer()
for path in paths {
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
if let any = path.svgAttributes["stroke"] {
shapeLayer.strokeColor = (any as! CGColor)
}
if let any = path.svgAttributes["fill"] {
shapeLayer.fillColor = (any as! CGColor)
}
layer.addSublayer(shapeLayer)
}
layer.contentsGravity = CALayerContentsGravity.resizeAspectFill
layer.contentsScale = UIScreen.main.scale
view.layer.addSublayer(layer)
}
}
struct SVGImage_Previews: PreviewProvider {
static var previews: some View {
SVGImage()
}
}
但是它不会显示整个图像视图
的年龄,并且只显示一部分。
But it doesn't display the entire image in the View
, and it only display part.
我还设置了 CALayerContentsGravity .resizeAspectFill
和 UIScreen.main.scale
,但不会生效。
I also set the CALayerContentsGravity.resizeAspectFill
and UIScreen.main.scale
, but it does not take effect.
推荐答案
这是一个相对简单的解决方法:
This is a relatively easy fix:
layer.position = svgView.center
并将该图层添加到 UIView
中,如下所示:
And also add the layer to a UIView
like the following:
import PocketSVG
import SwiftUI
struct SVGImage: UIViewRepresentable {
var SVGName: String?
var tintStrokeColor: CGColor?
var tintFillColor: CGColor?
func makeUIView(context: Context) -> UIView {
let svgView = UIView(frame: UIScreen.main.bounds)
svgView.contentMode = .scaleAspectFit
let svgURL = Bundle.main.url(forResource: "tiger", withExtension: "svg")!
let paths = SVGBezierPath.pathsFromSVG(at: svgURL)
let layer = CALayer()
for path in paths {
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
if let any = path.svgAttributes["stroke"] {
shapeLayer.strokeColor = (any as! CGColor)
}
if let any = path.svgAttributes["fill"] {
shapeLayer.fillColor = (any as! CGColor)
}
layer.addSublayer(shapeLayer)
}
layer.position = svgView.center
svgView.layer.addSublayer(layer)
return svgView
}
func updateUIView(_ view: UIView, context: Context) {
}
}
struct SVGImage_Previews: PreviewProvider {
static var previews: some View {
SVGImage()
}
}
这篇关于如何在SwiftUI中显示整个CALayer内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文