我想爲我的一個視圖控制器創建一個基本的卡片翻轉動畫。這裏是當前的設置:ios子視圖沒有響應觸摸事件
我有基本的ViewController,這個視圖控制器有一個名爲containerView(如下所示)的子視圖的XIB。
此容器視圖基本上然後持有「一卡通」翻轉多數民衆贊成的兩種狀態。我有一個UIView子類來表示cardFront和cardBack。在視圖控制器,我在viewDidLoad中的一些代碼去兩種觀點的引用:
ViewController.m
cardFront= [[UICard alloc]initWithType:YES];
cardBack = [[UICard alloc]initWithType:NO];
containerView.userInteractionEnabled = YES;
[containerView addSubview:cardBack];
然後,我基本上只是添加和刪除子視圖containerView,用小動畫。
然後,我有兩個XIB,一個用於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視圖(前面或後面)中沒有註冊點擊。我有按鈕等,只是沒有收到任何用戶交互。爲了測試,我已經放在
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
和
-(UIView *) hitTest:(CGPoint)point withEvent:(UIEvent *)event{
在UICard.m,既不會堪稱UICard類。我所能想到的是,containerView以某種方式竊取所有觸摸事件,但在iOS(我相信)中,最低的子視圖首先獲得點擊。任何人有什麼想法可以在這裏發生?編號: 以下是cardBack.xib的圖片。我有線了視圖(文件的所有者),以UICard的觀點財產
什麼是UICard類中的self.view? – Infinity
它連接到cardFront.xib和cardBack.xib,它們是自由形式的視圖。我在某處讀到了如何在飛行中充氣自定義xib的問題 – Jameo
如果您的卡片視圖位於容器視圖的邊界之外,將不會接收到水龍頭。您可能想在控制檯中執行[containerView遞歸描述],並驗證幀是您所期望的。 –