0

我已經在這裏找到一個解決方案How to flip an individual UIView (without flipping the parent view)翻轉2子視圖不工作時間可持續

,但似乎這並沒有爲我工作。在Interface Builder中,我用uiview創建了所有的視圖,並在這兩個uiviews中創建了相同的大小,第一個視圖顯示在上面,我爲這3個視圖創建了三個插座。

在viewDidLoad中:

[self.view addSubview:self.contentView] 
[self.contentView addSubview:firstView] 
[self.contentView addSubview:secondView] 

我有一個uigesture。當用戶點擊屏幕時,IBAction爲執行翻轉:

-(IBAction)flip:(id *)sender 
{ 
if(faceUp){ 

     // execute transition from firstview to second 
}else{ 

     //execute transition from secondview to first 
} 

faceUp = !faceUp; 
} 

這項工作完美我第一次點擊和翻轉從第一碰巧第二,那麼,如果我再次點擊翻頁開始,然後結束沒有任何東西,視圖消失並保持容器視圖不顯示,因爲它的顏色設置爲清除。 我該如何解決這個問題?

這與點擊手勢方法的控制器和三個出口:

#import "ContactViewController.h" 
    #import "InfoContactView.h" 
    #import "ImageLogoView.h" 

    @interface ContactViewController() 
    @property (strong, nonatomic) IBOutlet InfoContactView *contactInfoView; 
    @property (strong, nonatomic) IBOutlet ImageLogoView *imageLogoView; 
    @property (nonatomic) BOOL faceUp; 
    @property (strong, nonatomic) IBOutlet UIView *parentView; 


    @end 

@implementation ContactViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    // Custom initialization 
    } 
return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view. 

    self.parentView.backgroundColor =[UIColor clearColor]; 
    [self.view addSubview:self.parentView]; 
    [self.parentView addSubview:self.contactInfoView]; 
    [self.parentView addSubview:self.imageLogoView]; 


    self.faceUp = NO; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


-(void)setFaceUp:(BOOL)faceUp 
{ 
    _faceUp = faceUp; 

} 

-(void)setParentView:(UIView *)parentView 
{ 
    _parentView =parentView; 
} 

-(void)setContactInfoView:(InfoContactView *)contactInfoView 
{ 
_contactInfoView = contactInfoView; 
} 

-(void)setImageLogoView:(ImageLogoView *)imageLogoView 
{ 
    _imageLogoView = imageLogoView; 
} 

- (IBAction)showInfo:(UITapGestureRecognizer *)sender { 




    if (self.faceUp == NO) { 
     [UIView transitionFromView:self.imageLogoView toView:self.contactInfoView 
         duration:1.5 
         options:UIViewAnimationOptionTransitionFlipFromLeft 
         completion:NULL]; 
     NSLog(@"Pass from logo to info : imageLogoView = %@",self.imageLogoView.description); 

     NSLog(@"dettagli = %@",self.contactInfoView); 



    } 
    else if(self.faceUp == YES){ 
     [UIView transitionFromView:self.contactInfoView toView:self.imageLogoView 
         duration:1.5 
         options:UIViewAnimationOptionTransitionFlipFromRight 
         completion:NULL]; 

     NSLog(@"Pass from info to logo: imageLogoView = %@",self.imageLogoView.description); 

     NSLog(@"dettagli = %@",self.contactInfoView); 

    } 

    self.faceUp = !self.faceUp; 

} 




@end 
+0

你可以在你的'-flip'方法中發佈* if * else語句中的代碼嗎?對我來說,它看起來像'firstView'的引用在你的代碼中被設置爲'nil'。 – Mischa

+0

@Mischa我編輯了最初的帖子,用 – gcc

回答

0

我曾試圖重建Xcode中的問題。我在每次轉換之前和之後添加了一些代碼行來記錄parentView的子視圖。從日誌中您最初的視圖的框架(self.imageLogoView)來看重置爲寬度和高度爲0在某些點:

<UIView: 0x8b84310; frame = (159.5 284.5; 0 0); autoresize = W+H; layer = <CALayer: 0x8b84370>> 

這意味着它是仍然存在,但你無法看到它。

顯然Autolayout負責調整視圖的框架大小。如果您停用View Controller的Autolayout,則轉換工作正常。 (要停用自動佈局在你的故事板中選擇相應的視圖控制器。在右列中(公用事業)轉到第一個標籤first tab,並取消複選框「使用自動佈局」use Autolayout

在另一方面據說Autolayout是一件好事,至少它是由蘋果公司推廣的。所以,如果你想要使用Autolayout,你必須通過添加適當的約束來自己照顧你的視圖框架。首先選擇您的imageLogoView,並通過檢查下面截圖中顯示的各個框來添加寬度和高度的限制。然後對你的contactInfoView做同樣的事情。

Screenshot Xcode Constraints

這應該做的伎倆。

+0

裏面的翻轉方法添加整個控制器非常感謝! – gcc

相關問題