2009-09-30 12 views
7

Yeniden kullanılabilir UIViewController alt sınıfını, diğer görünüm denetleyicilerinde kalıcı görünüm denetleyicisi olarak gösterilebilen bir alt sınıf oluşturmak istiyorum. Bu yeniden kullanılabilir VC'nin yapması gereken ilk şeylerden biri, bir UIActionSheet'i açmaktır. Bunu yapmak için, eylem sayfasının gösterileceği VCimde bir varsayılan (boş) görünüm oluşturuyorum.Yarı saydam model UIViewController nasıl oluşturabilirim?

Ancak, bu durum kötü görünüyor çünkü modal vc açıldığında vc gizleniyor. Böylece eylem sayfasının boş bir arka plan üzerinde gezindiği görülüyor. Eylem sayfasının orijinal (veli) vc üzerinde görünmesi daha iyi olurdu.

Bunu başarmanın bir yolu var mı? Ebeveyn vc'nin görüşünü almak ve UIActionSheet'i bu şekilde canlandırmak güvenli midir?

+0

aynı sorunu yaşıyor: Ne yapabilirsiniz sizin viewDidAppear sonra subviews kendi görünümün listesinin arkasında ebeveynin resmini içeren bir UIImageView yerleştirin parentController bakış resmini çekmek :, içindedir. Herhangi bir çözüm? – Frade

cevap

0

Ebeveyn görünümünde görünümü ekleyerek ana görünüm denetleyicinizin üzerinde gösterebilirsiniz. Böyle

şey:

PseudoModalVC *vc = ...//initialization 
vc.view.backgroundColor = [UIColor clearColor]; // like in previous comment, although you can do this in Interface Builder 
vc.view.center = CGPointMake(160, -vc.view.bounds.size.height/2); 
[parentVC.view addSubView:vc.view]; 

// animation for pop up from screen bottom 
[UIView beginAnimation:nil context:nil]; 
vc.view.center = CGPointMake(160, vc.view.bounds.size.height/2); 
[UIView commitAnimation]; 
+1

Bunu yaparsanız, görüntülenen görünüm denetleyicisinde "viewWillAppear" gibi yöntemlere uygun aramaları da yapmanız gerekir. UINavigationController ve modal sistem bunun için normalde sizin için önemlidir. – DougW

-1

Yep. Geçerli görünüm denetleyicisinin görünümüne (veya pencerenin bir alt görünümü olarak) ekleyin ve Valerii'nin yaptığı gibi ekrana animasyon uygulayın.

Bunu yapmak, bir animasyon ile kaldırmak için (ben kalıcı görünüm 320 x 460 olduğunu varsayarak yaşıyorum ve ekranın dışına aşağı kayar):

- (void)dismissModal 
{ 
    // animate off-screen 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
    [UIView setAnimationDuration:0.50]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; 

    self.view.frame = CGRectMake(0, 480, 320, 460); 

    [UIView commitAnimations]; 
} 

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    // don't remove until animation is complete. otherwise, the view will simply disappear 
    [self.view removeFromSuperview]; 
} 
14

sizin modal görünümü olarak canlılar sonra, onu Ebeveyn görünümüne eşit boyutta olacak şekilde yeniden boyutlandırılır.

#pragma mark - 
#pragma mark Sneaky Background Image 
- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    // grab an image of our parent view 
    UIView *parentView = self.parentViewController.view; 

    // For iOS 5 you need to use presentingViewController: 
    // UIView *parentView = self.presentingViewController.view; 

    UIGraphicsBeginImageContext(parentView.bounds.size); 
    [parentView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *parentViewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    // insert an image view with a picture of the parent view at the back of our view's subview stack... 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; 
    imageView.image = parentViewImage; 
    [self.view insertSubview:imageView atIndex:0]; 
    [imageView release]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    // remove our image view containing a picture of the parent view at the back of our view's subview stack... 
    [[self.view.subviews objectAtIndex:0] removeFromSuperview]; 
} 
+1

iOS 5 için 'parentViewController' yerine' PresentViewController' kullanmanız gerekir. Cevabını içerecek şekilde güncelledim. –

+0

Bu çoğunlukla harika çalışıyor, ancak denediğimde, durum çubuğunun neden olduğu (tahmin ediyorum) üst görünüm resminin üst kısmında 20 piksellik bir boşluk görüyorum. Bunu düzeltmek için herhangi bir öneriniz var mı? – Mac

+0

Güncelleme: Görüntü içeriğimi 20 piksel yukarı doğru çevirerek bir düzeltme gerçekleştirdim, ancak başka birinin görmediği zaman neden merak ettiğimi merak ediyorum. – Mac

İlgili konular