SwiftUI 图表到 ShareSheet

Posted

技术标签:

【中文标题】SwiftUI 图表到 ShareSheet【英文标题】:SwiftUI Chart to ShareSheet 【发布时间】:2020-10-20 00:04:32 【问题描述】:

我在 SwiftUI 中通过以下方式使用图表:https://medium.com/@zzzzbh/plotting-in-ios-using-charts-framework-with-swiftui-222034a2bea6

我只想做一个屏幕特定部分的 ShareSheet。

图表是这样显示的。

Bar(entries: [
      
        BarChartDataEntry(x: 1, y: 1),
        BarChartDataEntry(x: 2, y: 1),
        BarChartDataEntry(x: 3, y: 1),
        BarChartDataEntry(x: 4, y: 1),
        BarChartDataEntry(x: 5, y: 1)

    ])

那么我怎样才能更改为图片以便分享它们呢?我不想分享整个页面 - 只是每个图表。

谢谢。

【问题讨论】:

这可能会有所帮助***.com/a/59333377/12299030 谢谢。我只是想出了我发布的答案,但如果有人有更好的方法,我真的很想听听他们 【参考方案1】:

我得到了这个工作。 ShareSheet 是标准的东西。图表来自上述网站。

这很有帮助:https://www.youtube.com/watch?v=lbyRsGCvm-Q

警告;如果在滚动视图中有问题。

        import SwiftUI
        import Charts
        
        struct ShareSheetView: View 
            
            @State private var showShareSheet = false
            
            @State var rect:CGRect = .zero
            @State var uiImage:UIImage? = nil
            
            @State var items : [Any] = []
            
            var body: some View 
                
                VStack(spacing: 20) 
                     
                    Button(action: 
                        
                        self.showShareSheet = true
                        
                        items.removeAll()
                        
                        self.uiImage = UIApplication.shared.windows[0].rootViewController?.view!.setImage(rect: self.rect)
                        
                        items.append(self.uiImage as Any)
                        
                        
                    ) 
                        Text("Share Chart").padding()
                    
                    
                    ChartView()
                        .background(RectSettings(rect: $rect))
                        .frame(width: 300, height: 300 )
                    
                    
                 .sheet(isPresented: $showShareSheet) 
                    ShareSheet(activityItems: items )
                
                
            
            
        
        
        
        struct ShareSheetView_Previews: PreviewProvider 
            static var previews: some View 
                ShareSheetView()
            
        
        
        struct ChartView: View 
            var body: some View 
                VStack 
                    
                    ReturnBarChart(entries: [
                        
                        BarChartDataEntry(x: 1, y: 1),
                        BarChartDataEntry(x: 2, y: 2),
                        BarChartDataEntry(x: 3, y: 3),
                        BarChartDataEntry(x: 4, y: 5),
                        BarChartDataEntry(x: 5, y: -2)
                        
                    ])
                    
                
            
        
        
        struct RectSettings: View 
            
            @Binding var rect: CGRect
            
            var body: some View 
                
                GeometryReader  geo in
                    self.setView(proxy: geo)
                    
                
                
            
            
            func setView(proxy: GeometryProxy) -> some View 
                
                DispatchQueue.main.async 
                    
                    self.rect = proxy.frame(in: .global)
                
                return Rectangle().fill(Color.clear)
                
            
            
        
        
        extension UIView 
            
            func setImage(rect: CGRect) -> UIImage 
                
                let renderer = UIGraphicsImageRenderer(bounds: rect)
                return renderer.image   rendererContext in
                    layer.render(in: rendererContext.cgContext)
                
                
            
            
        
        

【讨论】:

以上是关于SwiftUI 图表到 ShareSheet的主要内容,如果未能解决你的问题,请参考以下文章

在所有SwiftUI版本(1.0-4.0)中原生实现Charts图表视图之思路

在 SwiftUI 中对齐 HStack,但大小不相等

SwiftUI 4.0 中原生图表(Charts)实现超长内容滚动功能

SwiftUI 4.0 中原生图表(Charts)实现超长内容滚动功能

SwiftUI 列表动画

SwiftUI - 淡出 ScrollView