2014-02-08 128 views
0

我想爲我的一個視圖控制器創建一個基本的卡片翻轉動畫。這裏是當前的設置:ios子視圖沒有響應觸摸事件

我有基本的ViewController,這個視圖控制器有一個名爲containerView(如下所示)的子視圖的XIB。

enter image description here

此容器視圖基本上然後持有「一卡通」翻轉多數民衆贊成的兩種狀態。我有一個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的觀點財產

enter image description here

+0

什麼是UICard類中的self.view? – Infinity

+0

它連接到cardFront.xib和cardBack.xib,它們是自由形式的視圖。我在某處讀到了如何在飛行中充氣自定義xib的問題 – Jameo

+0

如果您的卡片視圖位於容器視圖的邊界之外,將不會接收到水龍頭。您可能想在控制檯中執行[containerView遞歸描述],並驗證幀是您所期望的。 –

回答

1

在UICard類嘗試self.userInteractionEnabled = YES;self是,你真的要啓用用戶交互實際看法。

+0

這沒有什麼區別。任何其他想法? – Jameo

+0

您是否能夠獲得cardfront或cardback顯示?它可能與框架有關。測試的一種快速方法是不用從nib文件加載視圖,只需創建一個通用的UIView並將其視圖和UICard視圖框架設置爲最大屏幕大小即可。另外,你應該在init()之前在你的init構造函數中做任何事情。 – Infinity

+0

該卡絕對顯示出來。這是關於它的最奇怪的部分之一,一切看起來都是正確的。只是沒有一個按鈕抓住觸摸事件。我將嘗試而不是添加containerView到ViewController,我將只添加cardBack,並查看發生了什麼。這樣,我可以縮小,如果containerView竊取點擊 – Jameo