문제

이미지와 세그먼트 컨트롤이 포함 된 uiscrollview가 있으며 사용자가 스크롤 뷰 내부의 이미지를 전환 할 수 있습니다. UIImageView 내부의 이미지를 교체하면 축소 된 상태에 새 이미지가 표시됩니다. Uiscrollview를 zoomed 상태로 다시 재설정하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

UiscrollView Zooming이 어떻게 작동하는지에 대한 자세한 토론이 있습니다. github.com/andreyvit/scrollingmadness/.

(링크에는 프로그래밍 방식으로 Uiscrollview를 프로그래밍 방식으로 확대하는 방법, 사진 라이브러리 스타일 페이징+Zooming+Scrolling, 예제 프로젝트 및 ZoomscrollView 클래스를 줌 줌 마술을 캡슐화하는 방법에 대한 설명이 포함되어 있습니다).

인용하다:

Uiscrollview는 "현재 줌 레벨"이라는 개념이 없습니다. 포함하는 각 하위 뷰에는 자체 줌 레벨이있을 수 있기 때문입니다. UiscrollView에는 현재 줌 레벨을 유지하기위한 필드가 없습니다. 그러나 우리는 누군가가 줌 레벨을 저장한다는 것을 알고 있습니다. 왜냐하면 당신이 하위 뷰를 핀치하고 cgaffinetransformidentity로 변환을 재설정 한 다음 다시 꼬집기 때문에 하위 뷰의 이전 줌 레벨이 복원되었음을 알 수 있습니다.

실제로, 분해를 보면, 자체 줌 레벨을 저장하는 것은 uiview입니다 (_gestureInfo 필드가 가리키는 uigestureInfo 객체 내부). 또한 문서화되지 않은 멋진 메소드도 있습니다. zoomScale 그리고 setZoomScale:animated:. (당신에게도, 그것은 또한 많은 회전 관련 방법을 가지고 있습니다. 아마도 우리는 곧 회전 제스처 지원을 받고있을 것입니다.)

그러나 확대 / 축소를위한 새로운 UIView를 만들고 실제 확대 실용보기를 자식으로 추가하면 항상 줌 레벨 1.0으로 시작합니다. 프로그래밍 방식 축소의 구현은이 트릭을 기반으로합니다.

다른 팁

핀치 확대 / 축소 이벤트 완료에 대한 시야를 다시 그리지하지 않으면 viewforzoominginscrollview : delegate method에서 반환 된 뷰의 변환 속성에 의해 줌 계수가 설정됩니다. 이 줌을 재설정하려면보기의 변환 속성의 값을 cgaffinetransformidentity로 설정하십시오.

그러나 다음 핀치 Zooming 작업은 이전 Pinch-Zoom이 중단 된 곳에서 시작됩니다 (즉, 새로운 스케일은 무시됩니다). 이 문제를 해결하려면 내가 설명하는 것 중 일부를 구현해야 할 수도 있습니다. 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top