development

UIScrollView에서 확대 / 축소를 활성화하는 방법

big-blog 2020. 12. 27. 20:41
반응형

UIScrollView에서 확대 / 축소를 활성화하는 방법


UIScrollView에서 확대 / 축소 효과를 활성화하려면 어떻게해야합니까?


답변은 다음과 같습니다.

스크롤보기는 콘텐츠의 확대 / 축소 및 이동도 처리합니다. 사용자가 핀치 인 또는 핀치 아웃 제스처를 수행하면 스크롤보기가 콘텐츠의 오프셋과 크기를 조정합니다. 제스처가 종료되면 콘텐츠보기를 관리하는 개체는 필요에 따라 콘텐츠의 하위보기를 업데이트해야합니다. (제스처가 종료 될 수 있고 손가락이 여전히 눌려있을 수 있습니다.) 제스처가 진행중인 동안 스크롤보기는 하위보기에 추적 호출을 보내지 않습니다.

UIScrollView 클래스에는 UIScrollViewDelegate 프로토콜을 채택해야하는 대리자가있을 수 있습니다. 확대 / 축소 및 이동이 작동하려면 대리자가 viewForZoomingInScrollView : 및 scrollViewDidEndZooming : withView : atScale :을 모두 구현해야합니다. 또한 최대 (maximumZoomScale) 및 최소 (minimumZoomScale) 확대 / 축소 배율이 달라야합니다.

그래서:

  1. 당신은 구현이 대리인을 필요 UIScrollViewDelegate로 설정되고 delegate사용자에 UIScrollView
  2. 델리게이트에서 하나의 메서드를 구현 해야합니다 : viewForZoomingInScrollView:( 확대 / 축소에 관심이있는 콘텐츠 뷰를 반환해야합니다 ). scrollViewDidEndZooming:withView:atScale:선택적으로 구현할 수도 있습니다 .
  3. 당신에 UIScrollView예, 당신은 설정해야 minimumZoomScale하고는 maximumZoomScale(그들은 기본적으로 1.0이다) 다른 것.

참고 : 이것에 대한 흥미로운 점은 확대 / 축소 중단 하려는 경우 입니다. 메서드 nil에서 반환하는 것으로 충분 viewForZooming...합니까? 확대 / 축소가 중단되지만 일부 제스처가 엉망이됩니다 (두 손가락의 경우). 따라서 확대 / 축소를 중단하려면 최소 및 최대 확대 / 축소 배율을 1.0으로 설정해야합니다.


이 Ray Wenderlich 튜토리얼을 읽어보십시오.

http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift

'더 큰 이미지를 스크롤 및 확대 / 축소'섹션을 따라 가면 이미지가 표시되고 핀치 및 확대 / 축소가 가능합니다.

링크가 변경된 경우 주요 정보는 다음과 같습니다.이 코드를 뷰 컨트롤러에 넣습니다 (주요 기능을 설정합니다).

override func viewDidLoad() {
  super.viewDidLoad()

  // 1
  let image = UIImage(named: "photo1.png")!
  imageView = UIImageView(image: image)
  imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size)
  scrollView.addSubview(imageView)

  // 2
  scrollView.contentSize = image.size

  // 3
  var doubleTapRecognizer = UITapGestureRecognizer(target: self, action: "scrollViewDoubleTapped:")
  doubleTapRecognizer.numberOfTapsRequired = 2
  doubleTapRecognizer.numberOfTouchesRequired = 1
  scrollView.addGestureRecognizer(doubleTapRecognizer)

  // 4
  let scrollViewFrame = scrollView.frame
  let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
  let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
  let minScale = min(scaleWidth, scaleHeight);
  scrollView.minimumZoomScale = minScale;

  // 5
  scrollView.maximumZoomScale = 1.0
  scrollView.zoomScale = minScale;

  // 6
  centerScrollViewContents()
}

이것을 수업에 추가하십시오.

func centerScrollViewContents() {
  let boundsSize = scrollView.bounds.size
  var contentsFrame = imageView.frame

  if contentsFrame.size.width < boundsSize.width {
    contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
  } else {
    contentsFrame.origin.x = 0.0
  }

  if contentsFrame.size.height < boundsSize.height {
    contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0
  } else {
    contentsFrame.origin.y = 0.0
  }

  imageView.frame = contentsFrame
}

그런 다음 두 번 탭 제스처를 인식하려면 다음을 수행하십시오.

func scrollViewDoubleTapped(recognizer: UITapGestureRecognizer) {
  // 1        
  let pointInView = recognizer.locationInView(imageView)

  // 2
  var newZoomScale = scrollView.zoomScale * 1.5
  newZoomScale = min(newZoomScale, scrollView.maximumZoomScale)

  // 3
  let scrollViewSize = scrollView.bounds.size
  let w = scrollViewSize.width / newZoomScale
  let h = scrollViewSize.height / newZoomScale
  let x = pointInView.x - (w / 2.0)
  let y = pointInView.y - (h / 2.0)

  let rectToZoomTo = CGRectMake(x, y, w, h);

  // 4
  scrollView.zoomToRect(rectToZoomTo, animated: true)
}

If you want more detail read the tutorial, but that pretty much covers it.


Make sure you set your viewController as the scrollViews delegate and implement:

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imageView
}

I don't think this is working for iOS 5.0 and Xcode 4.3+ Im looking for the same here, I found this its for images but it may help you.

http://www.youtube.com/watch?v=Ptm4St6ySEI

ReferenceURL : https://stackoverflow.com/questions/3657451/how-to-enable-zoom-in-uiscrollview

반응형