iOSでタブを切り替えるために画面のどこでも左右にスワイプすることはできますか? ありがとう
例 1: 左右にスワイプするだけでカレンダーの月を切り替える 例 2: 0:12 から開始http://www.youtube.com/watch?v=5iX4vcsSst8
iOSでタブを切り替えるために画面のどこでも左右にスワイプすることはできますか? ありがとう
例 1: 左右にスワイプするだけでカレンダーの月を切り替える 例 2: 0:12 から開始http://www.youtube.com/watch?v=5iX4vcsSst8
タブ バー コントローラーを使用している場合は、各タブのビューにスワイプ ジェスチャ レコグナイザーを設定できます。ジェスチャ レコグナイザーがトリガーされると、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];
}
あなたが使用していると仮定して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
の代わりに継承できます。
これを試して、
- (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"];
}
次のようにすべてを pageviewcontroller に埋め込むことをお勧めします: https://github.com/cwRichardKim/RKSwipeBetweenViewControllers
もちろん、それは可能です。
すべての画面UISwipeGestureRecognizer
にはスワイプ用の が必要であり、タブ バーを呼び出して目的のアクションを実行します。これは、アクティブなタブを増やしたり減らしたりすることから、必要なものまで何でもかまいません。
コードの重複を防ぐために、カスタムUIViewController
を作成し、すべてのビュー コントローラーをそこから継承させることができます (または他のいくつかの方法)。