gpt4 book ai didi

swiftui - 如何在 SwiftUI 中显示整个 CALayer 内容?

转载 作者:行者123 更新时间:2023-12-04 17:31:43 25 4
gpt4 key购买 nike

我的代码非常简单,如下所示:

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()
}
}

但它不会在 View 中显示整个图像,它只显示部分。

我也设置了 CALayerContentsGravity.resizeAspectFillUIScreen.main.scale ,但不生效。

最佳答案

这是一个相对简单的修复:
layer.position = svgView.center
并将图层添加到 UIView像下面这样:

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 - 如何在 SwiftUI 中显示整个 CALayer 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com