8

Her iki yüzüne de iki görüntülü bir merkez görünümü olan bir uygulamam var. Yeni bir navigasyon kontrol cihazını soldan veya sağdan görünüm üzerine iten iki adet navigasyon çubuğu düğmesi, sol ve sağa sahip olmak istiyorum.iPhone Görünüm Denetleyicisini sol yöne doğru itme

NavigationController'ın pushviewController: yöntemini kullanarak yeni bir görünüme basarak görünümleri değiştirdiğinizde, görünümün sağdan kaydırıldığı görünür. sola kaymak için bunu nasıl değiştiririm?

cevap

8

Gezinme denetleyicisi kullanmak yerine, yalnızca görünümü taşıyacağım.

CGRect inFrame = [currentView frame]; 
CGRect outFrame = firstFrame; 
outFrame.origin.x -= inFrame.size.width; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 

[newView setFrame:inFrame]; 
currentView setFrame:outFrame]; 

[UIView commitAnimations]; 
+0

böylelikle görünüm denetleyicisini normal şekilde yükleyin, sonra görünümde bir tutamacı tutun, sonra taşıyın. Ayrıca Gezinti çubuğu düğmelerini de –

+0

Sağ olarak el ile değiştirmek zorunda kalacağım. Görünüm denetleyicisini normal olarak yükleyin ve currentView'i ekrandan dışarı taşıyın ve newView'ü içeri taşıyın. –

+0

Bu çalışma (- = with a + =) yerine sola kaymak zorundasınız. Ancak bu, her bir görünüm için tüm düğmeleri manuel olarak geri ve ileri yapmak anlamına gelir. ne acı. –

4

UINavigationControllers uygulamasında kaydırma yönünü açıkça tanımlayabileceğinizi düşünmüyorum. Yapabildiğiniz şey, mevcut görünümü istediğiniz şekilde canlandıracak olan önceki görünümü göstermek için gezinme yığınından çıkarır. Ancak, mevcut görünümde ne yaptığınıza bağlı olarak farklı görüntü denetleyicilerinin görünmesini istiyorsanız bu karmaşık olabilir.

İş akışınız çok karmaşık değilse, geçerli görünüm denetleyicisindeki önceki görünüm denetleyicisine bir başvuru tutabilirsiniz. Eğer geçerli görünüme ne yaptığını bağlı, sen önce görünümü denetleyicisi içinde ne gerekiyorsa veri değiştirebilir (böyle bir tablo görünümünde hücre seçin) ve daha sonra ne olursa olsun doğru yöntemdir (bence

[self.navigationController popViewController]; 

arayın veya Bu nasıl oldukça yakındır). Bu, nav kümesini istediğiniz animasyonla birlikte hareket ettirmenize izin verir; bu, nav kümenizin üzerinde belirli sayıda görünüm varsa çalışır. "Pointy" tipi düğmeyi almak için farklı bir yöntem kullanmanız gerekir.

0

senin AppDelegate olarak

:

UITableViewController *first = [[RootViewController alloc] initWithStyle:UITableViewStylePlain]; 
UITableViewController *second = [[SomeOtherViewController alloc] initWithStyle:UITableViewStylePlain]; 

NSArray *stack = [NSArray arrayWithObjects: first, second, nil]; 

UINavigationController *nav = [[UINavigationController alloc] init]; 
[nav setViewControllers:stack animated:NO]; 
9

biz viewcontroller itmek zaman değişiklik animasyon yönü yaptık. animasyon tipini buradan değiştirebilirsiniz. [animation setSubtype: kCATransitionFromRight]; UINavigationController ve bu işlevleri üzerine:

ViewController *elementController = [[ViewController alloc] init]; 

// set the element for the controller 
ViewController.element = element; 


// push the element view controller onto the navigation stack to display it 

CATransition *animation = [CATransition animation]; 
[[self navigationController] pushViewController:elementController animated:NO]; 
[animation setDuration:0.45]; 
[animation setType:kCATransitionPush]; 
[animation setSubtype:kCATransitionFromRight]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]]; 
[[elementController.view layer] addAnimation:animation forKey:@"SwitchToView1"]; 

[elementController release]; 
+1

Önceki denetleyiciyi siyah yapar, bu kötü bir şeydir. –

0

Sen RTLNavigationController devralabilir.

- (void) pushViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    DummyViewController*dvc = [[DummyViewController alloc] init]; 
    [super pushViewController:viewController animated:NO]; 
    [super pushViewController:dvc animated:NO]; 
    [dvc release]; 
    [super popViewControllerAnimated:YES]; 
} 

ve

- (UIViewController *)popViewControllerAnimated:(BOOL)animated 
{ 
UIViewController *firstViewController = [super popViewControllerAnimated:NO]; 
UIViewController *viewController = [super popViewControllerAnimated:NO]; 
[super pushViewController:viewController animated:animated]; 
return firstViewController; 
} 

Ve uygulama temsilci

:

navCon = [[RTLNavigationController alloc] init]; 

rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
rootViewController.contextDelegate = self; 

DummyViewController *dvc = [[DummyViewController alloc]init]; 
[navCon pushViewController:dvc animated:NO]; 
[dvc release]; 

[navCon pushViewController:rootViewController animated:NO]; 
[self.window addSubview:navCon.view]; 

soldan sağa ve Reed Olsen söylediklerine

3

sağdan sola doğru haşhaş dan olacaktır Pushing: Sadece bir düğmeyi bağlamanız gerekir; bu, slaydı aynı yönteme kadar başlatır ve eğer t o görüntüleniyor ya da değil. Yapmanız gereken tek şey kaynağı doğru bir şekilde ayarlamak.

- (IBAction)slideMenuView 
{ 
    CGRect inFrame = [self.view frame]; 
    CGRect outFrame = self.view.frame; 

    if (self.viewisHidden) { 
    outFrame.origin.x += inFrame.size.width-50; 
    self.viewisHidden = NO; 
    } else { 
    outFrame.origin.x -= inFrame.size.width-50; 
    self.viewisHidden = YES; 
    } 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [self.menuView setFrame:inFrame]; 
    [self.view setFrame:outFrame]; 
    [UIView commitAnimations]; 
} 
İlgili konular