SwiftUI - Preview

文章目录


SizeCategory

SwiftUI - Preview


struct ContentView : View
{
    var body: some View
    {
        VStack
        {
            Text("Dynamic Type sizes")
                .font(.system(size: 36))
            
            Text("Dynamic Type sizes")
        }
    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider
{
    static var previews: some View
    {
        VStack
        {
            Spacer()

            ContentView()
                .environment(\.sizeCategory,
                             .extraSmall)

            Spacer()

            ContentView()

            Spacer()

            ContentView()
               .environment(\.sizeCategory,
                            .accessibilityExtraExtraExtraLarge)

            Spacer()
        }
    }
}
#endif

PreviewDevice

SwiftUI - Preview


struct ContentView : View
{
    var body: some View
    {
        VStack
        {
            Text("Dynamic Type sizes")
                .font(.system(size: 48))
            
            Text("Dynamic Type sizes")
        }
        
    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider
{
    static var previews: some View
    {
        Group
        {
           ContentView()
              .previewDevice(PreviewDevice(rawValue: "iPhone 8"))
              .previewDisplayName("Device-8")
            
        Spacer()
            
           ContentView()
              .previewDevice(PreviewDevice(rawValue: "iPhone 11 Pro Max"))
              .previewDisplayName("Device-XS Max")
        }
    }
}
#endif

ColorScheme-LightAndDark

SwiftUI - Preview


struct ContentView : View
{
    var body: some View
    {
        VStack(alignment: .center, spacing: 20)
        {
            Text("Dynamic Type sizes")
                .font(.system(size: 48))
                .foregroundColor(Color.secondary)
            
            Text("Dynamic Type sizes")
                .foregroundColor(Color.accentColor)
            
            Image(systemName: "star.fill")
                .foregroundColor(Color.secondary)
                .font(.system(size: 64))
            
            Image("couples")
        }
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
        .background(Color.black)
        .edgesIgnoringSafeArea(.all)
        
    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider
{
    static var previews: some View
    {
        HStack(spacing:0)
        {
           ContentView()
              .environment(\.colorScheme, .light)

           ContentView()
              .environment(\.colorScheme, .dark)
        }
    }
}
#endif


Context Menu

https://developer.apple.com/documentation/swiftui/contextmenu



struct ContentView : View
{
    var body: some View
    {
        VStack(spacing: 20)
        {
            Image(systemName: "gear")
                .font(.system(size: 64))
            
            Text("Settings")
                .font(.system(size: 14))
        }
        .contextMenu
        {
            VStack
            {
                Button(action: {
                    print("Leave a message.")
                }){
                    Text("Leave a message")
                    Image(systemName: "message")
                }
                
                Button(action: {})
                {
                    Text("Rate the app")
                    Image(systemName: "star")
                }
            }
        }
    }
}
 

Debug


struct ContentView : View
{
    @State var isAnimating = false
    
    var body: some View
    {
        ZStack
        {
            Rectangle()
                .fill(LinearGradient(gradient: Gradient.init(colors: [Color.init(red: 55/255, green: 67/255, blue: 109/255),Color.init(red: 54/255, green: 98/255, blue: 127/255)]), startPoint: .top, endPoint: .bottom))
                .edgesIgnoringSafeArea(.all)
            
            VStack
            {
                TopBarView()
                    .opacity(isAnimating ? 1 : 0)
                    .animation(Animation.spring().delay(0))
                
                SplitterView()
                    .opacity(isAnimating ? 1 : 0)
                    .animation(Animation.spring().delay(0.2))
                
                TopMenuView()
                    .opacity(isAnimating ? 1 : 0)
                    .animation(Animation.spring().delay(0.4))
                
                PieChartView()
                    .opacity(isAnimating ? 1 : 0)
                    .animation(Animation.spring().delay(0.6))
                
                CountryListView()
                    .opacity(isAnimating ? 1 : 0)
                    .animation(Animation.spring().delay(0.8))
            }
        }
    }
}

struct CircleView: View
{
    var diameter = chartWidth
    var color = activeColor
    var startPoint : CGFloat = 0
    var endPoint : CGFloat = 0.5
    var angle = -45.0
    
    @State var isAnimation = false
    
    var body: some View
    {
        ZStack
        {
            Circle()
                .stroke(lineWidth: 2)
                .fill(inactiveColor)
                .frame(width:diameter, height:diameter)
            
            Circle()
                .trim(from: isAnimation ? startPoint : 0, to: isAnimation ? endPoint : 1)
                .stroke(lineWidth: 4)
                .fill(color)
                .frame(width:diameter, height:diameter)
                .rotationEffect(.degrees(isAnimation ? angle : -720))
                .animation(.easeInOut(duration: 3))
                .onAppear {
                    self.isAnimation.toggle()
                }
        }
    }
}

struct TopBarView: View
{
    var body: some View
    {
        HStack
        {
            Image(systemName: "list.bullet.indent")
            
            Spacer()
            
            Text("STATISTICS")
                .bold()
            
            Spacer()
            
            Image(systemName: "magnifyingglass")
        }
        .padding(.leading,30)
        .padding(.trailing,30)
        .foregroundColor(.white)
    }
}

struct TopMenuView: View
{
    @State private var currentIndex : Int = 1
    
    var body: some View
    {
        VStack
        {
            HStack
            {
                Button(action:
                {
                    self.currentIndex = 1
                }){
                    Text("TODAY")
                        .font(.system(size: regularFontSize))
                        .frame(width: menuWidth, height: 40)
                        .foregroundColor(self.currentIndex == 1 ? activeColor : regularColor)
                }
                Button(action:
                {
                    self.currentIndex = 2
                }){
                    Text("WEEK")
                        .font(.system(size: regularFontSize))
                        .frame(width: menuWidth, height:40)
                        .foregroundColor(self.currentIndex == 2 ? activeColor : regularColor)
                }
                Button(action:
                {
                    self.currentIndex = 3
                }){
                    Text("MONTH")
                        .font(.system(size: regularFontSize))
                        .frame(width: menuWidth, height:40)
                        .foregroundColor(self.currentIndex == 3 ? activeColor : regularColor)
                }
                Button(action:
                {
                    self.currentIndex = 4
                }){
                    Text("ALL TIME")
                        .font(.system(size: regularFontSize))
                        .frame(width: menuWidth, height:40)
                        .foregroundColor(self.currentIndex == 4 ? activeColor : regularColor)
                }
            }
            
            ZStack(alignment: .leading)
            {
                SplitterView()
                Rectangle()
                    .fill(activeColor)
                    .frame(width: UIScreen.main.bounds.width/4, height:1)
                    .offset(x: menuWidth * CGFloat(currentIndex-1), y: 0)
                    .animation(.spring())
            }
        }
    }
}

struct PieChartView: View
{
    var body: some View
    {
        ZStack
        {
            CircleView()
            CircleView(diameter: chartWidth - 40, color: .purple, startPoint: 0, endPoint: 0.4, angle: 70)
            CircleView(diameter: chartWidth - 80, color: .green, startPoint: 0, endPoint: 0.3, angle: 190)
            CircleView(diameter: chartWidth - 120, color: .yellow, startPoint: 0, endPoint: 0.2, angle: 135)
            VStack
            {
                Text("1383")
                    .font(.system(size: 32))
                Text("Visits")
                    .font(.system(size: 14))
                    .foregroundColor(Color.white.opacity(0.5))
                    
            }
            .foregroundColor(.white)
        }
        .padding(.top, 30)
        .padding(.bottom, 30)
    }
}

struct CountryListView: View
{
    @State var isAnimating = false
    
    var body: some View
    {
        ScrollView
        {
            VStack
            {
                ForEach(0 ..< 7)
                { i in
                    VStack
                    {
                        HStack
                        {
                            Circle()
                                .fill(colors[i])
                                .frame(width: 10, height: 10)
                            Text(titles[i])
                            Spacer()
                            Text("\(visits[i])")
                        }
                        .padding(.leading, 30)
                        .padding(.trailing, 30)
                        .padding(.top, 10)
                        .padding(.bottom, 10)
                        .foregroundColor(.white)
                        .opacity(self.isAnimating ? 1 : 0)
                        .animation(Animation.spring().delay(Double(i) * 0.2 + 0.8))
                        
                        Rectangle()
                            .fill(inactiveColor)
                            .frame(width:UIScreen.main.bounds.width - 40, height:1)
                    }
                }
            }
            .onAppear
            {
                self.isAnimating.toggle()
            }
        }
    }
}

struct SplitterView: View
{
    var body: some View
    {
        Rectangle()
            .fill(inactiveColor)
            .frame(width: UIScreen.main.bounds.width, height:1)
    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider
{
    static var previews: some View
    {
        ContentView()
    }
}
#endif


上一篇:Linux系统安装jdk12


下一篇:编译jdk