2013-06-25 6 views
0

У меня есть приложение, которое имеет два вида на одном контроллере. Один вид выше другого. Когда кто-то щелкает или нажимает кнопку, вид сверху перемещается в сторону, чтобы отобразить вид снизу. Когда кто-то открывает новое представление и хочет вернуться к контроллеру представления с двумя представлениями, я хочу, чтобы сверху отображался вид снизу. Это мой код:iOS Switching Views Функция

@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 Override организовать мнения, однако вы хотите их на основе состояния приложения. Если пользователь не проверил или что-то еще, поставьте первый вид сверху. Если они проскользнули или что-то еще, переместите вид в сторону.

-viewDidLoad - это подходящее место для выполнения любых настроек, которые должны выполняться при первом просмотре представления. -viewWillAppear - это место, где нужно делать то, что должно произойти непосредственно перед представлением контроллера вида, и оно вызывается каждый раз, когда это происходит.

+0

Не могли бы вы рассказать мне, что написать? Благодарю. –

+0

Я думал, что просто сделал. Кажется, вы знаете, как перемещать вид сверху. Предположительно, вы также знаете, когда пользователь выполнил все действия, необходимые для перемещения представления. Кажется, единственное, что осталось, это заставить контроллер вашего вида запомнить, был ли пользователь уже перемещен, поэтому вы можете снова его переместить в следующий раз, когда появится представление. Для этого вам может понадобиться только переменная или свойство экземпляра BOOL. – Caleb

+0

Я получил работу, спасибо. Хотя я столкнулся с проблемой, когда приложение открывается. Я не хочу, чтобы вид сверху перемещался в сторону, когда приложение открывается в первый раз –