2014-07-16 9 views
11

Özel UI ile iOS 8 için bir Paylaşım Uzantısı geliştiriyorum, ancak animasyon olmadan görünüyor, bunu nasıl yapabilirim? Düzenli bir UIViewController.Sunuyu düzenleme ve bir Özelleştirme Uzantısı'nın iOS'taki özel kullanıcı arayüzü ile kapatılması

Ayrıca, iPad'de tam ekran görünür ve ekranın ortasında beliren ve buna uymayan bir model denetleyici olmasını isterim, bunu nasıl yapabilirim?

Saygılarımızla.

+0

Yerleştirmek istediğiniz görünüm animasyonu hakkında biraz bilgi verebilir misiniz? –

+0

Alvaro için konuşamam ama benim durumumda sadece "normal" form görünümü/modsal sunumunu istiyorum. Mevcut görünüm denetleyicisine erişiminiz olmadığını unutmayın, böylece yeni geçiş denetleyicisi öğelerinden bazılarını kullanamazsınız. –

+3

Şu anda yapmakta olduğum şey, boş bir arka plana sahip olan bir BlankViewController'ı bırakıyor, ve sonra viewDidAppear'da, ana görünüm kontrol cihazımı tercih ettiğim animasyonla sunabiliyorum. –

cevap

22

Özel görünüm denetleyicimi içeri ve dışarı canlandırmak için şu ana kadar bulduğum en temiz çözüm!

Animate IN:

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

    self.view.transform = CGAffineTransformMakeTranslation(0, self.view.frame.size.height); 
    [UIView animateWithDuration:0.25 animations:^ 
    { 
     self.view.transform = CGAffineTransformIdentity; 
    }]; 
} 

kapatma:

yerine UIViewController 'ın view, biraz farklı bir yaklaşım öneriyorum canlandırmanın
- (void)dismiss 
{ 
    [UIView animateWithDuration:0.20 animations:^ 
    { 
     self.view.transform = CGAffineTransformMakeTranslation(0, self.view.frame.size.height); 
    } 
    completion:^(BOOL finished) 
    { 
     [self.extensionContext completeRequestReturningItems:nil completionHandler:nil]; 
    }]; 
} 
1

.

ben yarattık (burada PresentingViewController denir) bir kukla UIViewController olan view.backgroundColor[UIColor clearColor] ayarlanır. Daha sonra, amaçlanan özel UIViewController modelini (ya da isterseniz özel animasyonu) üstte sunarım.

@implementation PresentingViewController 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self performSegueWithIdentifier:@"PresentController" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"PresentController"]) { 
    CustomViewController *controller = (CustomViewController *)[segue.destinationViewController topViewController]; 
    controller.context = self.extensionContext; 
    } 
} 

- (IBAction)unwindFromShareVC:(UIStoryboardSegue *)segue { 
    [self dismissViewControllerAnimated:YES completion:^{ 
    NSError *error = [NSError errorWithDomain:@"Cancelled" code:0 userInfo:nil]; 
    [self.extensionContext cancelRequestWithError:error]; 
    }]; 
} 

@end 

Notlar:

Bu

PresentingViewController kodudur

  1. extensionContext sadece PresentingViewController ayarlanır ve böylece CustomViewController aktarılmasını olması gereklidir.
  2. Görevden alınmayı engellemek için işten çıkarma işleminin tamamlanmasının zor olduğu için bir isteksizlik kullanamadım. Onun yerine dismissViewControllerAnimated:completion: kullandım.