uiview. 스케일링을 한 차원으로만 제한하는 방법은 어떻게하나요?

StackOverflow https://stackoverflow.com/questions/1423119

  •  07-07-2019
  •  | 
  •  

문제

uiview 인스턴스가 포함 된 uiscrollview 인스턴스가 있습니다. uiview는 Uiimageview 인스턴스의 수평 배열 용 컨테이너 일뿐입니다. - 축소는 uiscrollview 및 uiscrollviewdelegate에서 제공합니다. 수직 축하가 전혀없는 수평 축을 따라 만 확대 / 축소가 발생하도록 제한하고 싶습니다. 어떻게해야합니까?

예를 들어 UIView 서브 클래스 및 수직 스케일링을 방지하기위한 적절한 방법을 무시하는 방법이 있습니까? 나는이 접근법이 마음에 들지만 어떤 방법을 재정의 해야하는지, 그리고 그 재정의 방법이 실제로 무엇을 해야하는지는 확실하지 않습니다.

건배, 더그

도움이 되었습니까?

해결책

내가 묘사 한 것과 비슷합니다 이 답변, UIView 서브 클래스를 생성하고 -SetTransform : Accessor 메소드를 재정의하여 UISCrollView가 UIVIEW에 적용하려는 변환을 조정할 수 있습니다. 이 uiview를 컨텐츠 하위 뷰를 호스팅하도록 설정하고 UiscrollView의 하위 뷰로 만드십시오.

재정의 된 -세트 트랜스 form :, uiscrollview가 적용하고 조정하여 스케일링이 한 방향으로 만 적용되도록 조정하려는 변환을 취해야합니다. 로부터 cgaffinetransform 매트릭스가 구성되는 방법에 대한 문서화, 나는 다음 구현이 당신의 스케일링이 수평 방향을 따라야한다고 제한해야한다고 생각합니다.

- (void)setTransform:(CGAffineTransform)newValue;
{
 CGAffineTransform constrainedTransform = CGAffineTransformIdentity;
 constrainedTransform.a = newValue.a;
 [super setTransform:constrainedTransform];
}

다른 팁

OS 3.0을 사용하면 스크롤 뷰에서 Zoom에 Zoom을 Zoom으로 Zoom으로 알 수 있습니다. 나는 이것을 내 논리에 탭을 감지하는 것을 가지고 있습니다.

CGRect zoomRect = [self zoomRectForScale:newScale withCenter:CGPointMake(tapPoint.x, tapPoint.y) inScrollView:scrollView];
[scrollView zoomToRect:zoomRect animated:YES];

다른 부분의 경우, 새 프레임이 원본에 대한 비율로 이미지 뷰를 늘리고 동일한 중심 지점에 중앙을 중심으로해야합니다. Zoom 애니메이션과 동일하게 시간이 정해진 애니메이션 에서이 작업을 수행하여 올바르게 보일 수 있지만 이것이 유일한 방법이라고 생각합니다.

~ 안에 ScrollViewDidzoom :, 컨텐츠 뷰의 변수를 기준으로 조정하십시오 줌 스케일, 초기화 줌 스케일 그런 다음 1.0까지 setneedsdisplay 컨텐츠보기에서. 콘텐츠보기에서 실제 확대 / 줌을 처리하십시오 (원하는 방향) DrawRect :.

못생긴 세부 사항 :

  1. 줌이 진행되는 동안 UISCOLLVIEW가 변경됩니다. ContentOffSet 그리고 목차, 따라서 이전 값을 저장하십시오 ScrollViewWillBeginZooming : 그리고에서 ScrollViewDidzoom : 따라서 새로운 것을 계산할 수 있습니다 ContentOffSet 줌에 따라 자신.

  2. 변화 이후 줌 스케일 즉시 다른 것을 해고 할 것입니다 ScrollViewDidzoom :, 당신은 재설정하기 전에 bool을 설정해야합니다. 줌 스케일. 시작시 부울을 테스트하십시오 ScrollViewDidzoom : 그리고 사실이라면 반환.

  3. 당신은 억제해야 할 수도 있습니다 ScrollViewDidScroll : 줌이 진행되는 동안 (부울 테스트; ScrollViewWillBeginZooming : 그리고 그것을 지우십시오 ScrollViewDidendZooming :) 따라서 줌이 진행되는 동안 자신만의 ContentOffsets가 사용됩니다.

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