0

1 つのビュー コントローラーに 2 つのビューを持つアプリケーションがあります。1 つのビューが他のビューの上にあります。誰かがスワイプまたはボタンを押すと、上のビューが横に移動して下のビューが表示されます。誰かが新しいビューを開いて、2 つのビューでビュー コントローラーに戻りたい場合、ビューを一番上にして、下のビューを自動的に表示したいと考えています。これは私のコードです:

@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
4

1 に答える 1

0

-viewWillAppearアプリの状態に基づいて、必要に応じてビューを配置するようにオーバーライドします。ユーザーがスワイプなどをしていない場合は、最初のビューを一番上に置きます。スワイプなどを行った場合は、ビューを横に移動します。

-viewDidLoadビューが最初にロードされたときに必要なセットアップを実行するのに適した場所です。-viewWillAppearビューコントローラーのビューが表示される直前に発生する必要があることを行う場所であり、発生するたびに呼び出されます。

于 2013-06-25T16:13:55.447 に答える