내 View 컨트롤러 중 하나에 기본 카드 뒤집기 애니메이션을 만들려고합니다. 다음은 현재 설정입니다.ios 하위보기가 터치 이벤트에 응답하지 않습니다.
기본 ViewController가 있습니다.이보기 컨트롤러에는 containerView (아래 참조)라는 하위보기가있는 XIB가 있습니다.
이 컨테이너보기는 기본적으로 다음 "카드"그게 전부 뒤집기의 두 상태를 보유하고 있습니다. 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의보기 속성
UICard 클래스에서 self.view 란 무엇입니까? – Infinity
자유형보기 인 cardFront.xib와 cardBack.xib에 모두 연결됩니다. 나는 어딘가에 당신이 즉석에서 커스텀 xib를 부풀게하는 방법을 읽었습니다. – Jameo
컨테이너 뷰의 범위 밖에 있다면 카드보기는 탭을받지 못합니다. 콘솔에서 [containerView recursiveDescription]을 수행하고 예상 한 프레임인지 확인하십시오. –