2017-02-17 6 views
1

UIScrollView가 있고 스크롤 뷰 프레임이 UIView 프레임과 같지 않습니다. 따라서 스크롤보기 프레임 외부에서 스 와이프하는 동안 스크롤보기 내용은 스 와이프되지 않습니다. 스크롤보기는 전체 화면을 다루지는 않지만 전체 화면이 스크롤보기에 응답해야합니다. 스크롤 프레임을 뷰 프레임과 동등하게 만들 수 있다는 것을 알고 있습니다.하지만 그렇게하고 싶지는 않습니다. 나는 지금까지 발견 한 다른 가능한 해결책을 시도했다. 그러나 내가 원하는대로 아무 것도 작동하지 않습니다. 제스처 인식기를 사용하여이 작업을 수행해야합니다.UIView에서 스 와이프 제스처를 인식하여 제스처 인식기를 사용하여 scrollView를 스크롤하십시오.

override func viewDidLoad() { 
     super.viewDidLoad() 
     scrollView.delegate = self 

     let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture)) 
     swipeRight.direction = UISwipeGestureRecognizerDirection.right 
     self.view.addGestureRecognizer(swipeRight) 


     let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture)) 
     swipeLeft.direction = UISwipeGestureRecognizerDirection.left 
     self.view.addGestureRecognizer(swipeLeft) 

} 

func respondToSwipeGesture(gesture: UIGestureRecognizer) { 
     if let swipeGesture = gesture as? UISwipeGestureRecognizer { 
      switch swipeGesture.direction { 
      case UISwipeGestureRecognizerDirection.right: 

       scrollView.panGestureRecognizer.isEnabled = true 

      case UISwipeGestureRecognizerDirection.left: 

       scrollView.panGestureRecognizer.isEnabled = true 


      default: 
       break 
      } 
     } 
    } 

이것은 내보기 컨트롤러와 파란색 배경이 스크롤 뷰입니다 : 다음

내 코드입니다. 스 와이프 제스쳐는 해당 파란색 영역에서만 작동합니다. 그러나 나는 그것이 모서리에서도 화면을 통해 작동하고 싶습니다. 제스처 인식기을 사용하여 어떻게 구현할 수 있습니까?

+1

참조 http://stackoverflow.com/a/43328905/5173807 – 9it3e1

답변

3

편집

내가 실제로 단지 훨씬 간단에 대해 배운 블루 프레임까지 들어가도록 한 후,/오프셋 컨텐츠 삽입을 설정 해결책 : 을 viewDidAppear 또는 viewDidLoad에 추가하기 만하면됩니다. 이것은 본질적으로 무엇

걸릴 인 scrollViewUIPanGestureRecognizer, 손가락 드래그 인식하고 scrollView 스크롤 제스처 인식기의 콘텐츠를하고 드래그 손가락을 인식하고 scrollView 년대를 스크롤 할 수 있도록 기준 뷰에 준다 내용도.

그래서 아래에 설명 된대로 모든 수학 및 scrollRectToVisible이 필요하지 않습니다. 오, 음, UIScrollView가 작동하는 방식에 대해 자세히 배우는 것이 유용하고 재미 있다고 생각합니다.

OLD

프로그래밍의있는 UIScrollView "스크롤"을 만들기있는 UIScrollView의 scrollRectToVisible을 사용합니다.

자세한 내용과 코드 구문은 Programmatically scroll a UIScrollView을 참조하십시오.

기본적으로 언제든지 UIScrollView의 콘텐츠 하위보기은 프레임에서 어느 정도 오프셋됩니다.

그것은 (보라색있는 UIImageView 무시 주시기)이 그림처럼있는 UIScrollView (특히 컨텐츠 서브 뷰.)에 부품을 이해하는 데 도움

: enter image description here

첫 번째 이미지에서을의있는 UIScrollView의 내용 하위 뷰 (빨간색 윤곽선)은 UIScrollView의 프레임 (보이는 화면과 동일한 크기로 가정)에서 오프셋되지 않습니다. 둘 다 (0, 0)에 동일한 왼쪽 위 모서리를 갖습니다.

두 번째/중간 이미지에서 UIScrollView의 콘텐츠 하위 뷰는 이제 "위쪽"으로 오프셋됩니다. 콘텐츠 하위 뷰의 왼쪽 위 모서리는 이제 (0, -200)과 비슷하지만 (0, 0) 여전히 위쪽입니다. UIScrollView 프레임의 왼쪽 모서리.

다시 UIScrollView의 콘텐츠 하위 뷰 오프셋을 변경하여 scrollRectToVisible 및 매개 변수 animated: true을 사용하여 '스크롤'을 시뮬레이션 할 수 있습니다.

힌트이 : (예를 들어, 사용자가 오른쪽에서 왼쪽으로 스 와이프 후) 콘텐츠 스크롤 왼쪽을 가지고, 당신의 오프셋 (offset)있는 UIScrollView의 현재 내용을 것 X는 (scrollView.contentOffset.x)와 빼기의 폭을 조정 그것에 UIScrollView (scrollView.frame.size.width). 따라서 UIScrollView의 현재 내용 오프셋 (왼쪽 위 모서리)이 (0, 0)이면 내용 오프셋 (왼쪽 위 모서리)이 (0 - 폭, 0)에서 이동하고 내용이 왼쪽으로 이동합니다.

+1

새로운 방법의 문제점 중 하나는 팬 제스처가 실제 스크롤보기가 아닌 외부보기에서만 감지된다는 것입니다. 그래서 https://stackoverflow.com/questions/41131986/scrollview-gesture-recognizer-swipe-vertically/43328905#43328905에 언급 된 방법을 사용했습니다. – Abu

0

뷰의 프레임로 스크롤 뷰를 확인하지만, 그것은 단지

+0

또한 파란색 배경을 거기까지만 표시하려면 해당 배경색을 가진 UIView를 하위보기로 scrollview에 추가하기 만하면됩니다. 이전 프레임 (갭 포함) – Florensvb

+0

코드 plz을 쓸 수 있습니까? – mumu