단일 지점에서 최종 위치까지 2 개의 뷰를 애니메이션하는 방법

새로운 개발

square아래에 있는 두 개의 사각형을 공통 중심점에서 최종 위치 까지 애니메이션으로 표시하고 제거하면 다시 되돌리려 고합니다.

여기에 내가 시도한 것이 있지만 결과적으로 겹치는 위치에서 시작하지 않고 중앙에서 각각에 가깝게 시작합니다.

struct ContentView: View {
   @State var matched = true
   @State var show = false
   @Namespace var ns
    
   var body: some View {
      VStack {
         HStack {
            Spacer()
            if show {
               square
                  .matchedGeometryEffect(id: matched ? "match" : "", 
                                         in: ns, anchor: .center, isSource: false)
                  .animation(.easeIn)
                  .transition(.move(edge: .trailing ))
                  .onAppear { withAnimation { matched = false } }                        
                  .onDisappear { withAnimation { matched = true } }
            }
            Spacer()
               .matchedGeometryEffect(id: "match", in: ns, anchor: .center, isSource: true)   
            if show {
               square
                  .matchedGeometryEffect(id: matched ? "match" : ""
                                         in: ns, anchor: .center, isSource: false)
                  .animation(.easeIn)
                  .transition(.move(edge: .leading))
            }
            Spacer()
         }
         Button("show") { withAnimation { show.toggle() } }
      }
   }
}

사각형 square은 간단히 다음과 같이 정의됩니다.

var square: some View {
   Rectangle().foregroundColor(.blue)
      .frame(width: 40, height: 40, alignment: .center)
}

어떤 종류의 작업은에서 matchedGeometryEffect오버레이 에 연결 하고 모든 오버레이 Spacer에 명시 적으로 지정 properties: .position하는 것이 었습니다.

그래도 나타날 때만 작동하지만 사라질 때는 작동하지 않습니다. 거기에 여전히 간격이 있습니다.

Spacer().overlay(
   Color.clear
     .matchedGeometryEffect(id: "match", in: ns, properties: .position, anchor: .center, isSource: true)
   )

이것이이 효과를 얻기위한 올바른 일반적인 접근 방식입니까? 그렇다면 어떻게 작동시킬 수 있습니까? 아니면 너무 복잡하게 만들었나요?

센크 빌겐

치수가 같고 약간 단순화 된 다른 명확한 정사각형과 일치하는 형상을 사용해보십시오. 제거하고 일부 색상 혼합 모드로 교체 할 수있는 본질적인 불투명도 전환이 있습니다.

struct ContentView: View {
  //@State var matched = true
  @State private var show = false
  @Namespace private var ns
  
  var body: some View {
    VStack {
      
      HStack {
        Spacer()
        if show {
          Square(color: .blue)
            .matchedGeometryEffect(id: 1, in: ns, isSource: false)
        }
        Spacer()
          .background(Square(color: .clear)
                        .matchedGeometryEffect(id: show ? 0 : 1, in: ns, isSource: true))
        if show {
          Square(color: .red)
            .matchedGeometryEffect(id: 1, in: ns, isSource: false)
        }
        Spacer()
      }
       
      Button("show") { withAnimation { show.toggle() } }
    }
  }
  
  struct Square: View {
    let color: Color
    var width: CGFloat = 40
    var body: some View {
      Rectangle().foregroundColor(color).frame(width: width, height: width)
    }
  }
  
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Fabric JS : 삼각형의 상단과 왼쪽 위치를 동시에 애니메이션하는 방법은 무엇입니까? + 애니메이션 버그

분류에서Dev

모든면에서 모인 동일한 크기의 조각으로 최종 이미지를 구성하는 애니메이션을 만드는 방법은 무엇입니까?

분류에서Dev

부모의 맨 아래에 2 개의 뷰를 배치하지만 하나는 다른 뷰 위에 쌓이는 방법은 무엇입니까?

분류에서Dev

한 번에 2 개의 뷰를 생성하지 않는 방법

분류에서Dev

ListView의 위치에서 단일 전체 뷰를 얻는 방법이 있습니까?

분류에서Dev

다양한 종횡비 화면의 UI 위치를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

뷰의 개별 데이터 열에 일대 다를 하위 쿼리하는 SQL 최적의 방법

분류에서Dev

최상위 메뉴를 2 단계 메뉴로 지정하고 최상위 메뉴에 고유 한 이름을 지정하는 방법은 무엇입니까?

분류에서Dev

JavaScript에서 애니메이션 후 개체 위치를 저장하는 방법은 무엇입니까?

분류에서Dev

Android에서 단순히 뷰를 애니메이션하는 방법

분류에서Dev

단일 지점에서 많은 지점의 모든 지점까지의 거리를 측정하는 효율적인 방법이 있습니까?

분류에서Dev

Grails에서 쇼 페이지의 최종 범위를 표시하는 방법은 무엇입니까?

분류에서Dev

iOS의 맵뷰에 단일 위치를 표시하는 방법은 무엇입니까?

분류에서Dev

animate.css를 사용하여 하나의 html 태그에 2 개의 애니메이션을 추가하는 방법은 무엇입니까?

분류에서Dev

메시징 / 이메일 애플리케이션을위한 데이터베이스를 설정하는 최적의 방법은 무엇입니까?

분류에서Dev

해당 개체의 애니메이션 중에 UIImageView 위치를 얻는 방법이 있습니까?

분류에서Dev

산점도에서 단일 지점의 x 및 y 좌표를 얻는 방법이 있습니까?

분류에서Dev

2π 경계에서 회전 애니메이션 점프를 피하는 방법은 무엇입니까?

분류에서Dev

CSS에서 이미지 위치를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

현재 위치에서 오른쪽 상단까지 div 사본을 애니메이션하는 방법

분류에서Dev

2 개의 SVG 경로를 스택하고 애니메이션하는 방법은 무엇입니까?

분류에서Dev

테이블 뷰 셀의 배경에서 이미지 애니메이션을 설정하는 방법

분류에서Dev

단일 페이지 애플리케이션의 Google Analytics에서 페이지보기 이벤트를 트리거하는 방법은 무엇입니까?

분류에서Dev

UWP 페이지를 프레임에로드 할 때 StackPanel의 위치와 크기에 애니메이션을 적용하는 방법이 있습니까?

분류에서Dev

데이터 섹션 (RAM)에서 메모리 범위를 예약하고 해당 메모리를 사용하는 동일한 애플리케이션의 힙 / 스택을 방지하는 방법은 무엇입니까?

분류에서Dev

SwiftUI에 표시되는 애니메이션에서 뷰를 중지하는 방법은 무엇입니까?

분류에서Dev

연속으로 2 개 항목의 교체를 애니메이션하는 방법은 무엇입니까?

분류에서Dev

게시 방법이 동일한 2 개의 뷰가 있는데, DRY를 유지하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

React 단일 페이지 애플리케이션을 위해 PKCE로 OAuth2 Authorization 코드 부여를 구현하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Fabric JS : 삼각형의 상단과 왼쪽 위치를 동시에 애니메이션하는 방법은 무엇입니까? + 애니메이션 버그

  2. 2

    모든면에서 모인 동일한 크기의 조각으로 최종 이미지를 구성하는 애니메이션을 만드는 방법은 무엇입니까?

  3. 3

    부모의 맨 아래에 2 개의 뷰를 배치하지만 하나는 다른 뷰 위에 쌓이는 방법은 무엇입니까?

  4. 4

    한 번에 2 개의 뷰를 생성하지 않는 방법

  5. 5

    ListView의 위치에서 단일 전체 뷰를 얻는 방법이 있습니까?

  6. 6

    다양한 종횡비 화면의 UI 위치를 애니메이션하는 방법은 무엇입니까?

  7. 7

    뷰의 개별 데이터 열에 일대 다를 하위 쿼리하는 SQL 최적의 방법

  8. 8

    최상위 메뉴를 2 단계 메뉴로 지정하고 최상위 메뉴에 고유 한 이름을 지정하는 방법은 무엇입니까?

  9. 9

    JavaScript에서 애니메이션 후 개체 위치를 저장하는 방법은 무엇입니까?

  10. 10

    Android에서 단순히 뷰를 애니메이션하는 방법

  11. 11

    단일 지점에서 많은 지점의 모든 지점까지의 거리를 측정하는 효율적인 방법이 있습니까?

  12. 12

    Grails에서 쇼 페이지의 최종 범위를 표시하는 방법은 무엇입니까?

  13. 13

    iOS의 맵뷰에 단일 위치를 표시하는 방법은 무엇입니까?

  14. 14

    animate.css를 사용하여 하나의 html 태그에 2 개의 애니메이션을 추가하는 방법은 무엇입니까?

  15. 15

    메시징 / 이메일 애플리케이션을위한 데이터베이스를 설정하는 최적의 방법은 무엇입니까?

  16. 16

    해당 개체의 애니메이션 중에 UIImageView 위치를 얻는 방법이 있습니까?

  17. 17

    산점도에서 단일 지점의 x 및 y 좌표를 얻는 방법이 있습니까?

  18. 18

    2π 경계에서 회전 애니메이션 점프를 피하는 방법은 무엇입니까?

  19. 19

    CSS에서 이미지 위치를 애니메이션하는 방법은 무엇입니까?

  20. 20

    현재 위치에서 오른쪽 상단까지 div 사본을 애니메이션하는 방법

  21. 21

    2 개의 SVG 경로를 스택하고 애니메이션하는 방법은 무엇입니까?

  22. 22

    테이블 뷰 셀의 배경에서 이미지 애니메이션을 설정하는 방법

  23. 23

    단일 페이지 애플리케이션의 Google Analytics에서 페이지보기 이벤트를 트리거하는 방법은 무엇입니까?

  24. 24

    UWP 페이지를 프레임에로드 할 때 StackPanel의 위치와 크기에 애니메이션을 적용하는 방법이 있습니까?

  25. 25

    데이터 섹션 (RAM)에서 메모리 범위를 예약하고 해당 메모리를 사용하는 동일한 애플리케이션의 힙 / 스택을 방지하는 방법은 무엇입니까?

  26. 26

    SwiftUI에 표시되는 애니메이션에서 뷰를 중지하는 방법은 무엇입니까?

  27. 27

    연속으로 2 개 항목의 교체를 애니메이션하는 방법은 무엇입니까?

  28. 28

    게시 방법이 동일한 2 개의 뷰가 있는데, DRY를 유지하는 가장 좋은 방법은 무엇입니까?

  29. 29

    React 단일 페이지 애플리케이션을 위해 PKCE로 OAuth2 Authorization 코드 부여를 구현하는 방법은 무엇입니까?

뜨겁다태그

보관