2013-06-25 277 views
0

我有一個應用程序在一個視圖控制器上有兩個視圖。一種觀點在另一種觀點之上。當有人滑動或按下按鈕時,頂部的視圖移動到側面以顯示底部視圖。當有人打開一個新的視圖並想用兩個視圖返回到視圖控制器時,我希望頂部的視圖自動顯示底部視圖。 這是我的代碼:iOS切換視圖功能

@interface ViewController() 

@end 
@implementation ViewController 



@synthesize topLayer = _topLayer; 
@synthesize layerPosition = _layerPosition; 

- (void)viewDidLoad 
{ 
[super viewDidLoad] 

self.topLayer.layer.shadowOffset = CGSizeMake(-1,0); 
self.topLayer.layer.shadowOpacity = .9; 

self.layerPosition = self.topLayer.frame.origin.x; 
} 

#define VIEW_HIDDEN 264 

-(void) animateLayerToPoint:(CGFloat)x 
{ 
[UIView animateWithDuration:0.3 
         delay:0 
        options:UIViewAnimationCurveEaseOut 
       animations:^{ 
        CGRect frame = self.topLayer.frame; 
        frame.origin.x = x; 
        self.topLayer.frame = frame; 
       } 
       completion:^(BOOL finished){ 
        self.layerPosition =self.topLayer.frame.origin.x; 

       }]; 
} 

- (IBAction)toggleLayer:(id)sender { 


    if (self.layerPosition == VIEW_HIDDEN) { 
     [self animateLayerToPoint:0]; 
    } else { 
     [self animateLayerToPoint:VIEW_HIDDEN]; 
    } 



} 

- (IBAction)panLayer:(UIPanGestureRecognizer*)pan { 
if (pan.state == UIGestureRecognizerStateChanged) { 
    CGPoint point = [pan translationInView:self.topLayer]; 
    CGRect frame = self.topLayer.frame; 
    frame.origin.x = self.layerPosition + point.x; 
    if (frame.origin.x < 0) frame.origin.x = 0; 
    self.topLayer.frame = frame; 
} 
if (pan.state == UIGestureRecognizerStateEnded) { 
    if (self.topLayer.frame.origin.x <= 160) { 
     [self animateLayerToPoint:0]; 
    } else { 
     [self animateLayerToPoint: VIEW_HIDDEN]; 
    } 
} 
} 

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


@end 
+1

問題是什麼? – allprog

+0

我需要知道,如何將視圖加載到頂視圖移到一邊,以便在有人按下另一個視圖上的後退按鈕返回到此視圖時顯示第二個視圖。 –

+1

如果你正在使用應該已經發生的導航控制器 – micantox

回答

0

覆蓋-viewWillAppear,但是你想他們基於應用程序的狀態來安排的意見。如果用戶沒有刷過或者其他東西,把第一個視圖放在最上面。如果他們已經滑過或者其他什麼,將視圖移到一邊。

-viewDidLoad是執行視圖第一次加載時需要發生的任何設置的正確位置。 -viewWillAppear是在視圖控制器視圖顯示之前應該發生的事情的地方,每次發生時都會調用它。

+0

你能告訴我該寫什麼嗎?謝謝。 –

+0

我以爲我只是做了。你似乎知道如何移動頂視圖。據推測,你也知道用戶何時執行了任何需要移動視圖的操作。似乎唯一剩下的就是讓視圖控制器記住用戶是否已經移動了視圖,以便下次顯示視圖時再次移動視圖。你可能只需要一個'BOOL'實例變量或屬性。 – Caleb

+0

我懂了,謝謝。雖然我在應用程序打開時遇到問題。我不希望頂級視圖在第一次打開時移動到一側 –