UIScrollView에서 확대 / 축소를 활성화하는 방법
UIScrollView에서 확대 / 축소 효과를 활성화하려면 어떻게해야합니까?
답변은 다음과 같습니다.
스크롤보기는 콘텐츠의 확대 / 축소 및 이동도 처리합니다. 사용자가 핀치 인 또는 핀치 아웃 제스처를 수행하면 스크롤보기가 콘텐츠의 오프셋과 크기를 조정합니다. 제스처가 종료되면 콘텐츠보기를 관리하는 개체는 필요에 따라 콘텐츠의 하위보기를 업데이트해야합니다. (제스처가 종료 될 수 있고 손가락이 여전히 눌려있을 수 있습니다.) 제스처가 진행중인 동안 스크롤보기는 하위보기에 추적 호출을 보내지 않습니다.
UIScrollView 클래스에는 UIScrollViewDelegate 프로토콜을 채택해야하는 대리자가있을 수 있습니다. 확대 / 축소 및 이동이 작동하려면 대리자가 viewForZoomingInScrollView : 및 scrollViewDidEndZooming : withView : atScale :을 모두 구현해야합니다. 또한 최대 (maximumZoomScale) 및 최소 (minimumZoomScale) 확대 / 축소 배율이 달라야합니다.
그래서:
- 당신은 구현이 대리인을 필요
UIScrollViewDelegate
로 설정되고delegate
사용자에UIScrollView
예 - 델리게이트에서 하나의 메서드를 구현 해야합니다 :
viewForZoomingInScrollView:
( 확대 / 축소에 관심이있는 콘텐츠 뷰를 반환해야합니다 ).scrollViewDidEndZooming:withView:atScale:
선택적으로 구현할 수도 있습니다 . - 당신에
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
'development' 카테고리의 다른 글
Twitter Bootstrap API를 사용하여 어떤 장치보기에 있는지 감지하는 방법은 무엇입니까? (0) | 2020.12.27 |
---|---|
MySQL 사용자에게 호스트 액세스 권한 재 할당 (0) | 2020.12.27 |
Django REST 프레임 워크에 사용자를 등록하는 방법은 무엇입니까? (0) | 2020.12.27 |
새 Google Analytics 3.0 베타를 설치하려고 할 때 발생하는 링커 오류 (0) | 2020.12.27 |
layout / main.xml에서 내부 클래스보기를 참조하는 중 오류가 발생했습니다. (0) | 2020.12.27 |