tabview 增加手势判断UIPanGestureRecognizer

来源:互联网 发布:ubuntu 查看配置 编辑:程序博客网 时间:2024/06/05 11:58
- (void)awakeFromNib{
 UIPanGestureRecognizer* recognizer;
    // handleSwipeFrom 是偵測到手势,所要呼叫的方法
    recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:selfaction:@selector(handlePanFrom:)];
    // 不同的 Recognizer 有不同的实体变数
    // 例如 SwipeGesture 可以指定方向
    // 而 TapGesture 則可以指定次數
    //recognizer.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
    recognizer.delegate = self;
    [_tableView addGestureRecognizer:recognizer];
    [recognizer release];
}
 
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer
{
    CGPoint translation = [gestureRecognizer translationInView:[[UIApplication sharedApplication] keyWindow]];
     
    // Check for horizontal gesture
    if(sqrt(translation.x * translation.x) / sqrt(translation.y * translation.y) > 1)
    {
        returnYES;
    }
     
    returnNO;
}
 
- (void)handlePanFrom:(UIPanGestureRecognizer*)recognizer {
 
    if(recognizer.state == UIGestureRecognizerStateBegan) {
        ;
    }
    elseif (recognizer.state == UIGestureRecognizerStateChanged) {
        CGFloat xOffSet = [recognizer translationInView:[[UIApplication sharedApplication] keyWindow]].x;
         
        AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        if(xOffSet < 0) {
            [appDelegate makeRightViewVisible];
        }
        elseif (xOffSet > 0) {
            [appDelegate makeLeftViewVisible];
        }
         
        self.navigationController.view.frame = CGRectMake(xOffSet,
                                                          self.navigationController.view.frame.origin.y,
                                                          self.navigationController.view.frame.size.width,
                                                          self.navigationController.view.frame.size.height);
    }
    elseif (recognizer.state == UIGestureRecognizerStateEnded) {
        if(self.navigationController.view.frame.origin.x < -kTriggerOffSet)
            [selfmoveToLeftSide];
        // animate to right side
        elseif (self.navigationController.view.frame.origin.x > kTriggerOffSet)
            [selfmoveToRightSide];
        // reset
        else
            [selfrestoreViewLocation];
 
    }
}