>

다른 뷰의 관점을 기준으로 뷰의 변환을 변환하는 가장 좋은 방법은 무엇입니까?

<시간>

예 :

보기 A에는보기 B와 C의 두 자녀가 있습니다.보기 B에는보기 D의 자녀도 있습니다

View Hierarchy
      A
     / \
    B   C
   /
  D

B의 변환은 identity 가 아닙니다  D는 "identity" 입니다 하지만 D가 분리 된 것으로 간주되는 경우에만 (B의 변환을 고려하지 않음)

뷰 C는 뷰 D의 변환이 상대적으로 무엇인지 알아야한다. C 관점에서 D는 identity 가 아닙니다. .

<시간>

나는 UICoordinateSpace 에 대해 생각하고있다  그리고 그것은 convert 입니다  행동 양식. 변형을 위해 유사한 비밀 방법을 어떻게 만들 수 있습니까?

도움이 대단히 감사합니다 :)

  • 답변 # 1

    @ 브랜든 UICoordinateSpace 를 사용해야한다고 제안했습니다  와이즈 비즈  뷰의 프레임을 다른 뷰의 CoordinateSpace로 변환하고 프레임 차이에서 변환을 얻는 방법입니다. 이 솔루션은 저에게 효과적이지만 convert 를 고려하지는 않습니다. 대신 회전되지 않은 회전 된 프레임에 맞게 변환 배율을 조정합니다.

    솔루션

    rotationAngle
    
    

    @Brandon이 도와 주셔서 감사합니다 :)

    extension UIView { /// Returns transform for translation and scale difference from self and given view. func convertScaleAndTranslation(to view: UIView) -> CGAffineTransform { return CGAffineTransform.from(frame, to: convert(frame, to: view)) } } extension CGAffineTransform { /// Returns transform for translation and scale difference from two given rects. static func from(_ from: CGRect, to: CGRect) -> CGAffineTransform { let sx = to.size.width / from.size.width let sy = to.size.height / from.size.height let scale = CGAffineTransform(scaleX: sx, y: sy) let heightDiff = from.size.height - to.size.height let widthDiff = from.size.width - to.size.width let dx = to.origin.x - widthDiff / 2 - from.origin.x let dy = to.origin.y - heightDiff / 2 - from.origin.y let trans = CGAffineTransform(translationX: dx, y: dy) return scale.concatenating(trans) } }

  • 이전 laravel 5.4 - 최신 결과를 먼저 얻기위한 쿼리 모델
  • 다음 html - 부트 스트랩 4 축소 된 탐색 모음 브랜드가 중앙에 있지 않음