SORU
26 Mayıs 2009, Salı


Program aracılığıyla görünümler arasında geçiş yapmak için Nasıl?görünümü Denetleyicileri:

İki tam ekran görünümleri istiyorum, görünüm ve görünüm B. arasında geçiş yapabilirsiniz, sadece Sekme Çubuğu Denetleyicisi kullanabilirim, ama ben vermek istemiyorum. Kısacası: Bu başlık altında neler olduğunu öğrenmek için elinden nasıl yapıldığını görmek istiyorum.

Kök denetleyicisi olarak görev yapan UİViewController var:

@interface MyRootController : UIViewController {
    IBOutlet UIView *contentView;
}
@property(nonatomic, retain) UIView *contentView;

@end

Bu contentView "" kalem Ucu. görünüm için bir küme olarak ekledim bir UİView bağladım. Bu yeşil renk ve tam ekran görüyorum. Gayet iyi çalışıyor.

Daha sonra, diğer iki Görünümü Denetleyicileri hemen hemen aynı şekilde yarattım. ViewControllerA ve ViewControllerB. ViewControllerA mavi bir arka plan vardır, ViewControllerB siyah bir arka plan vardır. Bir etkin olduğunu görmek için.

Yani, myRootController uygulanmasında:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    ViewControllerA *vcA = [[ViewControllerA alloc] initWithNib];
    [self.contentView addSubview:vcA.view];

    [cvA release];
}

Bu arada,- initWithNib yöntem bu gibi görünüyor:

- (id)initWithNib { // Load the view nib
    if (self = [super initWithNibName:@"ViewA" bundle:nil]) {
        // do ivar initialization here, if needed
    }
    return self;
}

O çalışır. Uygulamayı başlattığımda ViewControllerA manzarayı görüyorum. Ama şimdi büyük soru: Görünüm Denetleyicisi genellikle sürü yöntem vardır:

  • (geçersiz)viewWillAppear:(BOOL)animasyon;
  • (geçersiz)viewDidDisappear:(BOOL)animasyon;
  • (void)viewDidLoad;

...ve benzeri. Kim ya da ne, ya da nasıl bu yöntemleri eğer yaparsam diye "benim" hesabı olmadan yönlü kontrol çubuğu? Ben bu ViewController sınıfı tahsis ve manzarası görünür olsun, bu yöntemleri çağırmadan hakkında dikkat çekmek için var ki? yani: Nasıl viewWillAppear, viewDidDisappear veya viewDidLoad biliyor mu? Sekme Çubuğu Denetleyicisi "akıllılık" başlık altında. tüm bu olduğuna inanıyorum Yoksa ben mi yanılıyorum?

GÜNCELLEME: test ettik. Eğer görünüm denetleyicisi bırakırsam (örneğin: ViewControllerA), viewDidDisappear. hiçbir hata iletisi alırsınız Ve ViewControllerA tahsis başlatılıyor sadece, bir viewDidLoad. Ama hepsi o kadar. Tüm işaretler UİTabBarController zekisin şimdi ;) için standı ve çoğaltmak için nasıl anlamaya var, değil mi?

CEVAP
26 Mayıs 2009, Salı


İPhone Geliştirme Bölüm 6'da, görünümler arasında geçiş güzel bir örnek var. Kaynak kodu burada görebilirsiniz: http://iphonedevbook.com/

Değiştirmek için gerekli kod SwitchViewController programlama yoluyla bulunur.


- (IBAction)switchViews:(id)sender
{

    if (self.yellowViewController == nil)
    {
    	YellowViewController *yellowController = [[YellowViewController alloc]
                initWithNibName:@"YellowView" bundle:nil];
    	self.yellowViewController = yellowController;
    	[yellowController release];
    }

    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:1.25];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    UIViewController *coming = nil;
    UIViewController *going = nil;
    UIViewAnimationTransition transition;

    if (self.blueViewController.view.superview == nil) 
    {	
    	coming = blueViewController;
    	going = yellowViewController;
    	transition = UIViewAnimationTransitionFlipFromLeft;
    }
    else
    {
    	coming = yellowViewController;
    	going = blueViewController;
    	transition = UIViewAnimationTransitionFlipFromRight;
    }

    [UIView setAnimationTransition: transition forView:self.view cache:YES];
    [coming viewWillAppear:YES];
    [going viewWillDisappear:YES];
    [going.view removeFromSuperview];
    [self.view insertSubview: coming.view atIndex:0];
    [going viewDidDisappear:YES];
    [coming viewDidAppear:YES];

    [UIView commitAnimations];

}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HowcastSportsFitness

    HowcastSport

    11 Mayıs 2011
  • Khan Academy

    Khan Academy

    17 Kasım 2006
  • Truc Minh

    Truc Minh

    23 Ocak 2011