15

iOSでタブを切り替えるために画面のどこでも左右にスワイプすることはできますか? ありがとう

例 1: 左右にスワイプするだけでカレンダーの月を切り替える 例 2: 0:12 から開始http://www.youtube.com/watch?v=5iX4vcsSst8

4

5 に答える 5

20

タブ バー コントローラーを使用している場合は、各タブのビューにスワイプ ジェスチャ レコグナイザーを設定できます。ジェスチャ レコグナイザーがトリガーされると、tabBarController.selectedTabIndex を変更できます。

この効果はアニメーション化されませんが、スワイプ ジェスチャでタブが切り替わります。これは、左右にボタンがあり、スワイプ ジェスチャでアクティブなタブを変更する UITabBar を備えたアプリを持っていたときに使用したものとほぼ同じです。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(tappedRightButton:)];
    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
    [self.view addGestureRecognizer:swipeLeft];

    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(tappedLeftButton:)];
    [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
    [self.view addGestureRecognizer:swipeRight];
}

- (IBAction)tappedRightButton:(id)sender
{
    NSUInteger selectedIndex = [rootVC.tabBarController selectedIndex];

    [rootVC.tabBarController setSelectedIndex:selectedIndex + 1];
} 

- (IBAction)tappedLeftButton:(id)sender
{
    NSUInteger selectedIndex = [rootVC.tabBarController selectedIndex];

    [rootVC.tabBarController setSelectedIndex:selectedIndex - 1]; 
}
于 2012-09-21T16:24:21.017 に答える
9

あなたが使用していると仮定してUITabBarConroller

すべての子 ViewController は、面倒な作業をすべて行うクラスから継承できます。

これが私がやった方法です

class SwipableTabVC : UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let left = UISwipeGestureRecognizer(target: self, action: #selector(swipeLeft))
        left.direction = .left
        self.view.addGestureRecognizer(left)

        let right = UISwipeGestureRecognizer(target: self, action: #selector(swipeRight))
        right.direction = .right
        self.view.addGestureRecognizer(right)
    }

    func swipeLeft() {
        let total = self.tabBarController!.viewControllers!.count - 1
        tabBarController!.selectedIndex = min(total, tabBarController!.selectedIndex + 1)

    }

    func swipeRight() {
        tabBarController!.selectedIndex = max(0, tabBarController!.selectedIndex - 1)
    }
}

したがって、UITabControllers の一部であるすべてのビューコントローラーは、UIViewControllerSwipableTabVCの代わりに継承できます。

于 2017-08-10T13:51:19.003 に答える
7

これを試して、

- (void)viewDidLoad
{
    [super viewDidLoad];

    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(tappedRightButton:)];
    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
    [self.view addGestureRecognizer:swipeLeft];

    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(tappedLeftButton:)];
    [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
    [self.view addGestureRecognizer:swipeRight];
}

- (IBAction)tappedRightButton:(id)sender
{
    NSUInteger selectedIndex = [rootVC.tabBarController selectedIndex];

    [self.tabBarController setSelectedIndex:selectedIndex + 1];

    //To animate use this code
    CATransition *anim= [CATransition animation];
    [anim setType:kCATransitionPush];
    [anim setSubtype:kCATransitionFromRight];
    [anim setDuration:1];
    [anim setTimingFunction:[CAMediaTimingFunction functionWithName:
                                  kCAMediaTimingFunctionEaseIn]];
    [self.tabBarController.view.layer addAnimation:anim forKey:@"fadeTransition"];
} 

- (IBAction)tappedLeftButton:(id)sender
{
    NSUInteger selectedIndex = [rootVC.tabBarController selectedIndex];

    [self.tabBarController setSelectedIndex:selectedIndex - 1]; 

    CATransition *anim= [CATransition animation];
    [anim setType:kCATransitionPush];
    [anim setSubtype:kCATransitionFromRight];

    [anim setDuration:1];
    [anim setTimingFunction:[CAMediaTimingFunction functionWithName:
                              kCAMediaTimingFunctionEaseIn]];
    [self.tabBarController.view.layer addAnimation:anim forKey:@"fadeTransition"];
}
于 2015-08-25T05:21:08.427 に答える
3

次のようにすべてを pageviewcontroller に埋め込むことをお勧めします: https://github.com/cwRichardKim/RKSwipeBetweenViewControllers

于 2014-07-26T07:53:23.167 に答える
1

もちろん、それは可能です。

すべての画面UISwipeGestureRecognizerにはスワイプ用の が必要であり、タブ バーを呼び出して目的のアクションを実行します。これは、アクティブなタブを増やしたり減らしたりすることから、必要なものまで何でもかまいません。

コードの重複を防ぐために、カスタムUIViewControllerを作成し、すべてのビュー コントローラーをそこから継承させることができます (または他のいくつかの方法)。

于 2012-09-21T16:03:06.177 に答える