2014-02-08 3 views
0

내 View 컨트롤러 중 하나에 기본 카드 뒤집기 애니메이션을 만들려고합니다. 다음은 현재 설정입니다.ios 하위보기가 터치 이벤트에 응답하지 않습니다.

기본 ViewController가 있습니다.이보기 컨트롤러에는 containerView (아래 참조)라는 하위보기가있는 XIB가 있습니다.

enter image description here

이 컨테이너보기는 기본적으로 다음 "카드"그게 전부 뒤집기의 두 상태를 보유하고 있습니다. cardFront 및 cardBack을 나타내는 UIView 하위 클래스가 있습니다. 의 ViewController에서, 나는 두보기에 대한 참조를 얻을 수있는 viewDidLoad에서 몇 가지 코드를 가지고 :

cardFront= [[UICard alloc]initWithType:YES]; 
cardBack = [[UICard alloc]initWithType:NO]; 
containerView.userInteractionEnabled = YES; 
[containerView addSubview:cardBack]; 

그런

ViewController.m을, 나는 기본적으로 그냥 추가하고 작은으로, containerView에 파단을 제거 생기.

그런 다음 cardFront에 하나, cardBack에 하나, UICard가 어떤보기를 팽창할지 결정합니다. 그래서 UICard은 다음과 같습니다

UICard.m 꽤 똑바로 앞으로

-(id)initWithType:(BOOL)front{ 
    self = [super init]; 
    self.isFront = front; 

    if(isFront){ 
     [[NSBundle mainBundle] loadNibNamed:@"CardFront" owner:self options:nil]; 
    } 
    else{ 
     [[NSBundle mainBundle] loadNibNamed:@"CardBack" owner:self options:nil]; 
    } 
    [self addSubview:self.view]; 


    self.view.userInteractionEnabled = YES; 



    return self; 
} 
//..later on, when i want to flip the card 
[UIView transitionWithView:containerView 
          duration:0.5 
          options:UIViewAnimationOptionTransitionFlipFromLeft 
         animations:^ 
         { 
          [cardFront removeFromSuperview]; 
          [containerView addSubview:cardBack]; 
          cardFront.isShowing = NO; 
          cardBack.isShowing = YES; 
          isFlipping = NO; 
         } 
         completion:NULL]; 

. 문제는 UICard 뷰 (정면 또는 후면)에 클릭이 등록되지 않는다는 것입니다. 버튼 등이있어 사용자 상호 작용을받지 못합니다. 테스트하기 위해, 나는 UICard.m에

-(UIView *) hitTest:(CGPoint)point withEvent:(UIEvent *)event{ 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

을 배치하지 한, 어느 쪽도 아니 UICard 클래스에서 호출됩니다. 내가 생각할 수있는 모든 것은 어떻게 든 containerView가 모든 터치 이벤트를 훔쳐 가고 있지만, iOS (나는 경의를 표한다)에서 가장 낮은 서브 뷰가 클릭을 먼저 얻는다는 것이다. 누구든지 여기에 무슨 일이 벌어 질지에 대한 아이디어가 있습니까 ??

편집 : 다음은 cardBack.xib의 그림입니다. 나는 self 당신이 정말 사용자 상호 작용을 사용하려면 실제보기가로 UICard 클래스에 self.userInteractionEnabled = YES;을 시도 UICard의보기 속성

enter image description here

+0

UICard 클래스에서 self.view 란 무엇입니까? – Infinity

+0

자유형보기 인 cardFront.xib와 cardBack.xib에 모두 연결됩니다. 나는 어딘가에 당신이 즉석에서 커스텀 xib를 부풀게하는 방법을 읽었습니다. – Jameo

+0

컨테이너 뷰의 범위 밖에 있다면 카드보기는 탭을받지 못합니다. 콘솔에서 [containerView recursiveDescription]을 수행하고 예상 한 프레임인지 확인하십시오. –

답변

1

로보기 (파일 소유자)를 유선.

+0

이 차이가 나지 않았습니다. 다른 아이디어? – Jameo

+0

카드 프론트 또는 카드 백을 모두 표시 할 수 있었습니까? 프레임과 관련이있을 수 있습니다. 빠른 테스트 방법은 nib 파일에서 뷰를로드하는 대신 일반 UIView를 만들고 해당 뷰와 UICard 뷰 프레임을 최대 화면 크기로 설정할 수 있습니다. 또한 init 생성자에서 (자체) 수행하기 전에 수행해야합니다. – Infinity

+0

카드가 확실히 표시됩니다. 그것은 가장 이상한 부분 중 하나입니다. 버튼 중 아무도 터치 이벤트를 잡지 않습니다.나는 ViewController에 containerView를 추가하는 대신 CardBack을 추가하고 무슨 일이 일어나는지 보려고합니다. 그런 식으로 containerView가 클릭을 훔치는 경우 좁힐 수 있습니다. – Jameo

관련 문제