SwiftUI 표와 뒤를 전환하여 카드 넘김을 표현

소개



조금 편리한 것을 만들어 보았습니다. 카드 게임을 만들거나 재미있는 UI를 앱에 통합하고 싶을 때.



사용법



표: true, 뒤: false


  • @State var isFront = true 같은 느낌으로, 표리의 상태를 나타내는 변수 를 만들어 둡니다.
    버튼을 누를 때나 이 변수를 변경하면 앞뒤가 바뀝니다.

  • 플립


  • Flip(変数, { 表 }, { 裏 }) 를 사용합니다.
  • duration: 넘기는 속도를 조정할 수 있습니다. 설정하지 않아도 OK.

  • Sample.swift
    
    ...
    // 裏と表がある View
    Flip(isFront: isFront, // 先に作っておいた変数 isFront
         front: {
    
             Image("H1") // 表面 ハートのA
         },
         back: {
    
             Image("Back") // カード裏面
         })
    ...
    

    Copipe 코드



    통째로 복사하고 프로젝트의 어딘가에 있습니다.

    Flip.swift
    
    import SwiftUI
    
    struct Flip<Front: View, Back: View>: View {
        var isFront: Bool
        @State var canShowFrontView: Bool
        let duration: Double
        let front: () -> Front
        let back: () -> Back
    
        init(isFront: Bool,
             duration: Double = 1.0,
             @ViewBuilder front: @escaping () -> Front,
             @ViewBuilder back: @escaping () -> Back) {
            self.isFront = isFront
            self._canShowFrontView = State(initialValue: isFront)
            self.duration = duration
            self.front = front
            self.back = back
        }
    
        var body: some View {
            ZStack {
                if self.canShowFrontView {
                    front()
                }
                else {
                    back()
                        .rotation3DEffect(Angle(degrees: 180), axis: (x: 0, y: 1, z: 0))
                }
            }
            .onChange(of: isFront, perform: {
                value in
                DispatchQueue.main.asyncAfter(deadline: .now() + duration/2.0) {
                    self.canShowFrontView = value
                }
            })
            .animation(nil)
            .rotation3DEffect(isFront ? Angle(degrees: 0): Angle(degrees: 180), axis: (x: CGFloat(0), y: CGFloat(10), z: CGFloat(0)))
            .animation(.easeInOut(duration: duration))
        }
    }
    
    

    사이고에게



    "넘기는"은 뭔가 좋은 소리입니다.

    좋은 웹페이지 즐겨찾기