홈>
다른 뷰의 관점을 기준으로 뷰의 변환을 변환하는 가장 좋은 방법은 무엇입니까?
<시간>예 :
보기 A에는보기 B와 C의 두 자녀가 있습니다.보기 B에는보기 D의 자녀도 있습니다
View Hierarchy
A
/ \
B C
/
D
B의 변환은
identity
가 아닙니다
D는
"identity"
입니다
하지만 D가 분리 된 것으로 간주되는 경우에만 (B의 변환을 고려하지 않음)
identity
가 아닙니다.
.
<시간>
나는
UICoordinateSpace
에 대해 생각하고있다
그리고 그것은
convert
입니다
행동 양식. 변형을 위해 유사한 비밀 방법을 어떻게 만들 수 있습니까?
도움이 대단히 감사합니다 :)
- 답변 # 1
관련 질문
- ios : UIAlertController에 커스텀 UIView 추가하기
- ios : 아래쪽 또는 위쪽이 없는 UIView 둥근 테두리
- ios : 셀에서 UIView로 데이터를 전달할 수 없습니다.
- ios : MVVM을 사용하여 JSON을 모델로 디코딩
- ios : 구조체의 특정 값을 사용자 지정 셀로 설정하는 방법은 무엇입니까?
- ios : spriteKit을 사용하여 신속하게 원을 그리는 방법은 무엇입니까?
- ios : Gesturer Recognizer 이전에 UIResponder를 어떻게 넣을 수 있습니까?
- ios : 건강 키트 -내 건강 데이터와 함께 공유 건강 데이터 가져오기
- Xcode(iOS 앱)는 개인 저장소에서 호스팅되는 swift 패키지를 어떻게 사용할 수 있습니까?
- ios : ViewDidLoad를 호출하는 ViewController 간에 분리하는 방법
@ 브랜든
솔루션UICoordinateSpace
를 사용해야한다고 제안했습니다 와이즈 비즈 뷰의 프레임을 다른 뷰의 CoordinateSpace로 변환하고 프레임 차이에서 변환을 얻는 방법입니다. 이 솔루션은 저에게 효과적이지만convert
를 고려하지는 않습니다. 대신 회전되지 않은 회전 된 프레임에 맞게 변환 배율을 조정합니다.@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) } }