2014-07-01 6 views
1

swipe 제스처 인식기를 swift를 사용하여 컬렉션보기에 추가하려고합니다. 사용자가 오른쪽 또는 왼쪽으로 스 와이프 할 때마다 컬렉션보기를 다시로드해야합니다. 그러나 시뮬레이터의 컬렉션보기에서 오른쪽 또는 왼쪽으로 스 와이프하면 오류가 발생하고 AppDelegate.swift 클래스가 자동으로 열립니다. 이 오류는 말한다 "의 libC++ abi.dylib : 형 NSException의 캐치되지 않는 예외로 종료"를 collectionViewController 클래스왜 스 와이프 제스처 인식기가 신속하게 오류를 발생 시키나요?

collectionView.userInteractionEnabled = true 
    collectionView.delegate = self 

    var left = UISwipeGestureRecognizer(target: collectionView, action: "swipping:") 
    left.direction = UISwipeGestureRecognizerDirection.Left 
    collectionView.addGestureRecognizer(left) 



    var right = UISwipeGestureRecognizer(target: collectionView, action: "swipping:") 
    right.direction = UISwipeGestureRecognizerDirection.Right 
    collectionView.addGestureRecognizer(right) 

이의

내가있는 viewDidLoad (이 부분을 작성하는)을 swipping 기능입니다 :

 func swipping (gesture : UIGestureRecognizer){ 
    if let swipeGesture = gesture as? UISwipeGestureRecognizer { 
     switch swipeGesture.direction { 
     case UISwipeGestureRecognizerDirection.Left: 
      collectionView.reloadData() 
      pageControl.currentPage++ 


     case UISwipeGestureRecognizerDirection.Right: 
      collectionView.reloadData() 
      pageControl.currentPage-- 

     default: 
      break 
     } 

    } 
} 

추가 UIGestureRecognizerDelegate CollectionViewController 클래스와 AppDelegate에 클래스. 어떻게해야합니까?

감사합니다.

답변

2

당신은 당신이 대상으로 collectionView를 지정 제스처 인식기 선언 할 때 :

var left = UISwipeGestureRecognizer(target: collectionView, action: "swipping:") 

을하지만 난 와이프 믿는다 방법은 선언이 일어나고 같은 파일에 저장됩니다. 당신은 자기에게 대상을 변경해야합니다 :

var left = UISwipeGestureRecognizer(target: self, action: "swipping:") 
var right = UISwipeGestureRecognizer(target: self, action: "swipping:") 

// 확장

UICollectionView가있는 UIScrollView의 하위 클래스이기 때문에이 작동하지 않으며 사용자가 제스처를 처리있는 UIScrollView 슬쩍 때 모음을 만들 수 있기 때문에 (이것이 가로보기에서는 콜렉션 뷰가 왼쪽/오른쪽으로 스크롤한다는 것을 알 필요가 있습니다).

당신은 UIScrollViewDelegate 메소드를 오버라이드 (override) 고려해야합니다

- (void)scrollViewDidScroll:(UIScrollView *)scrollView; 

가 슬쩍 알아 당신이 대신 제스처 인식기를 추가로 처리해야합니다. 그런

시도 뭔가 : 자네 말이 맞아

//Declare private property 
@property (nonatomic, assign) CGFloat prevOffset 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (self.prevOffset > scrollView.contentOffset.x) 
     // You are swiping right 
    else if (self.prevOffset < scrollView.contentOffset.x) 
     // You are swiping left 

    self.prevOffset = scrollView.contentOffset.x; 
} 
+0

, 나는 그것을 변경되었습니다. 이제는 왼쪽이나 오른쪽으로 스 와이프 할 때 인식하지 못합니다. 오류가 발생하지 않지만 다시 작동하지 않습니다. – simge

+0

확장 답변을 참조하십시오. – Greg

+0

내가 말한 것처럼 scrollViewDidScroll 함수를 작성합니다. 그러나 결코 호출되지 않습니다. scrollViewDidScroll 메서드에서 무언가를 인쇄하여 실행하고 스크롤하려고 할 때 콘솔에 아무것도 인쇄하지 못했습니다. – simge

관련 문제