0

Facebook や Path アプリケーションなどのサイド パネルの実装に JTRevealSideBarDemoV2 を使用しています。私はあらゆる意味でそれを構成しましたが、このライブラリにもう 1 つの機能を追加したいだけです。私が欲しいのは、facebook と同じように、このライブラリにジェスチャ認識コントロールを適用することです。誰かが助けることができますか?

このライブラリをダウンロードするためのリンクは次のとおりです。https://www.cocoacontrols.com/controls/jtrevealsidebar

ありがとう!

@wattson:- これは、Gesture Recognizer を実装するために追加したコードです。Bしかし、非常に異常な動作をしています。JTRevealSideBarDemoV2 のコードをダウンロードした場合は、私が書いたコードを分析できます。

コードは次のとおりです。

        (void)setUpGestures{
    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] 
  initWithTarget:self action:@selector(movePanel:)];
   [panRecognizer setMinimumNumberOfTouches:1];
    [panRecognizer setMaximumNumberOfTouches:1];
    [panRecognizer setDelegate:self];

      [self.view addGestureRecognizer:panRecognizer];
      }

     -(void)movePanel:(id)sender {
        [[[(UITapGestureRecognizer*)sender view] layer] removeAllAnimations];

         CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender
        translationInView:self.view];
        CGPoint velocity = [(UIPanGestureRecognizer*)sender velocityInView:[sender view]];

       if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
    //UIView *childView = nil;

    if(velocity.x > 0) {
        if (!JTRevealedStateRight) {
             [self revealLeftSidebar:(UIPanGestureRecognizer *)sender];
        }
    } else {
        if (!JTRevealedStateLeft) {
             [self revealRightSidebar:(UIPanGestureRecognizer *)sender];
        }

    }
    // Make sure the view you're working with is front and center.
    //[self.view sendSubviewToBack:];
    [[sender view] bringSubviewToFront:[(UIPanGestureRecognizer*)sender view]];
}

if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {

    if(velocity.x > 0) {
        // NSLog(@"gesture went right");
    } else {
        // NSLog(@"gesture went left");
    }

    if (!_showPanel) {
        [self revealLeftSidebar:(UIPanGestureRecognizer *)sender];
    } else {
        if (JTRevealedStateLeft) {
            [self revealRightSidebar:(UIPanGestureRecognizer *)sender];
        }  else if (JTRevealedStateRight) {
            [self revealLeftSidebar:(UIPanGestureRecognizer *)sender];
        }
    }
}

if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateChanged) {
    if(velocity.x > 0) {
        // NSLog(@"gesture went right");
    } else {
        // NSLog(@"gesture went left");
    }

    // Are you more than halfway? If so, show the panel when done dragging by setting this
      value to YES (1).
    _showPanel = abs([sender view].center.x - self.view.frame.size.width/2) > 
      self.view.frame.size.width/2;

    // Allow dragging only in x-coordinates by only updating the x-coordinate with
     translation position.
    [sender view].center = CGPointMake([sender view].center.x + translatedPoint.x, [sender
      view].center.y);
    [(UIPanGestureRecognizer*)sender setTranslation:CGPointMake(0,0) inView:self.view];

    // If you needed to check for a change in direction, you could use this code to do so.
    if(velocity.x*_preVelocity.x + velocity.y*_preVelocity.y > 0) {
        // NSLog(@"same direction");
    } else {
        // NSLog(@"opposite direction");
    }

    _preVelocity = velocity;
}

}

4

0 に答える 0