2012-09-21 8 views

cevap

1

Tabii en, bu mümkün başlar.

Her ekranın, kaydırma çubukları için bir UISwipeGestureRecognizer olması gerekir, ardından sekme çubuğuna çağrı yapmak istediğiniz eylemi gerçekleştirin. Etkin sekmeyi, istediğiniz herhangi bir şeye artırmaktan veya azaltmaktan herhangi bir şey olabilir.

Kod çoğaltma önleme amacıyla, özel bir UIViewController oluşturabilir ve tüm görünüm denetleyicileriniz oradan (veya başka birkaç yoldan) miras almanıza olanak tanır.

20

Bir sekme çubuğu denetleyicisi kullanıyorsanız, her sekmenin görünümüne bir kaydırma jest tanıyıcıyı ayarlayabilirsiniz. Hareket algılayıcısı tetiklendiğinde, tabBarController.selectedTabIndex

Bu efekt hareketli olmayacaktır, ancak kaydırma tuşunu kullanarak sekmeleri değiştirir. Bu, sol ve sağ taraftaki düğmelerle bir UITabBar'la bir uygulama yaptığımda ve aktif sekmeyi değiştirmek için jestleri kaydırırken kullandığım şeydi.

- (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]; 
} 
ben şöyle bir pageviewcontroller içine tüm şey gömme öneriyoruz
+0

Bu nedenle, Android yayınının orjinal defterindeki örneğinde olduğu gibi animasyon yapmak mümkün olmaz mı? – user1689272

+1

Geçmişte daha akıcı bir sekme denetimi oluşturdum ve yukarıdaki sekme çubuğundan çok daha özel bir çözümdü. Son bir kez böyle bir şey yaptım, yan yana koydu tüm bölüm görünümü denetleyicileri içeren gerçekten uzun bir görünüm denetleyicisi oluşturdu (5 bölüm vardı, böylece VC 5x ekran genişliği oldu). Navigasyon, konteyner VC'nin sola ve sağa kaydırılmasını içeriyordu. Tüm VC'lerin her zaman hafızada kalması en iyi yöntem değil, ama ihtiyacım olan şey için elimden gelenin en iyisi. Maalesef bu kod parçacıklarını gösteremiyorum. – skladek

+3

iOS7'den itibaren, bu efekti gerçekleştirmek için özel bir görünüm denetleyicisi geçişiyle 'UIPercentDrivenInteractiveTransition 'kullanmak mümkündür. Temelde kaymayı yapmak için özel bir itme/pop animasyonuna sahip bir navigasyon denetleyicisine sahip olacaksınız. UIPercentDrivenInteractiveTransition, geçişin bir kaydırma gibi değil, bir kaydırma olarak izlenmesine izin verecektir. – skladek

6

bu deneyin,

- (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"]; 
} 
+0

Teşekkürler, gerçekten yardımcı olur. –

2

Eğer UITabBarConroller

Tüm Çocuğunuz ViewControllers kullanıyor olabilir varsayarsak Sizin için tüm ağır kaldırmayı yapan bir sınıftan miras alın.

Bu ben

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) 
    } 
} 

Yani UITabControllers parçası olan tüm viewcontrollers SwipableTabVC yerine UIViewController gelen devralabilir yapmış nasıl.