2

iOS5(iPad)にスライディングドロワーを実装しています。UIViewをサブクラス化してドロワーを作成しました。引き出しがメインビューに追加され、正常に機能します。ただし、スワイプジェスチャとsetFrameを使用してドロワーのオン/オフ画面をスライドさせようとすると、ドロワーが移動しません。

ジェスチャレコグナイザーを正しく実装し、フレームも正しく設定されていると思います。ただし、引き出しは動かないだけです。私が間違っていることについて何か考えはありますか?

以下は私のコードです:

次のメソッドは、コントローラーのviewDidLoadから呼び出されます。

- (void)loadVerticalDrawer
{
    NSLog(@"LoadVerticalDrawer Executed");
    verticalDrawerHidden = YES;
    if (verticalDrawerHidden) {
    verticalDrawer = [[VerticalDrawer alloc] initWithFrame:CGRectMake(514, 250, 60, 248)];//adjust verticalDrawer height and width here;
    } else {
    verticalDrawer = [[VerticalDrawer alloc] initWithFrame:CGRectMake(464, 250, 60, 248)];//adjust verticalDrawer height and width here;    
    }

    verticalDrawer.appsManager = appsManager;
    verticalDrawer.delegate = self;
    [self.view addSubview:verticalDrawer];
}

以下もviewDidLoadから呼び出されます。

rightDrawerLeftSwipe = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightDrawerHandleSwipeLeft:)] autorelease];
    rightDrawerLeftSwipe.direction = UISwipeGestureRecognizerDirectionLeft;
    rightDrawerLeftSwipe.numberOfTouchesRequired = 1;
    rightDrawerLeftSwipe.delegate = self;
    [verticalDrawer addGestureRecognizer:rightDrawerLeftSwipe];

    rightDrawerRightSwipe = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightDrawerHandleSwipeRight:)] autorelease];
    rightDrawerRightSwipe.direction = UISwipeGestureRecognizerDirectionRight;
    rightDrawerRightSwipe.numberOfTouchesRequired = 1;
    rightDrawerRightSwipe.delegate = self;
    [verticalDrawer addGestureRecognizer:rightDrawerRightSwipe];

最後に、これは右スワイプのハンドラーです。

-(void) rightDrawerHandleSwipeRight:(UISwipeGestureRecognizer*) recognizer
{
    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        if (!verticalDrawerHidden){
        verticalDrawerHidden = YES;
        float x = verticalDrawer.frame.origin.x;
        float y = verticalDrawer.frame.origin.y;
        float width = verticalDrawer.frame.size.width;
        float height = verticalDrawer.frame.size.height;

        NSLog(@"Swipe left, Vertical drawer, x=%f, y=%f, width=%f, height=%f:", x,y,width,height);
        x+=50;
        [verticalDrawer setFrame:CGRectMake(x,y,width,height)];
        NSLog(@"Swipe left, Vertical drawer, x=%f, y=%f, width=%f, height=%f:", x,y,width,height);
        return;
        }
        else {
            return;
        }
    }
}

ログによると、verticalDrawerのフレームが正しく設定されている(そしてスワイプハンドラーが必要に応じて呼び出されている)ことに注意してください。ビューがまったく移動していないだけです。

4

0 に答える 0