2013-12-13 16 views
5

Mevcut görünüm denetleyicisinin bakış açısını küçültmek ve saydamlık ile başka bir yere koymak için nasıl bir yöntem elde edeceğini bilen var mı? Tweetbot 3'te, avatar çubuğundaki gezinme çubuğunun sol üst kısmına dokunduğunuzda elde edilir. Örneğin bir enstantane çekmeli miyim? sıfırdan görünüm yığını yeniden inşa etmek zorunda kalacak bu etkiyi elde etmek içinTweetbot küçültme görünümü geçişi gibi

The Tweetbot transition I mean http://www.yoeri.me/files/tweetbot-transition.gif

+0

GIF animasyonu için hangi aracı kullanıyorsunuz? –

+0

, ikisini “birleştirmeyi” deneyebilirsiniz: https://github.com/autresphere/ASDepthModal https://www.cocoacontrols.com/controls/namodalsheet veya https://www.cocoacontrols.com/controls/mzformsheetcontroller – TonyMkenu

cevap

3

. Bunu, sen canlandırabilirsiniz varsa Şimdi

@implementation ViewController 
@synthesize container; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    container = [[UIView alloc] initWithFrame:self.view.frame]; 
    [self.view addSubview:container]; 
    // add all views later to this insted of self.view 

    // continue viewDidLoad setup 
} 

: viewController.view 'ın çerçevesini değiştirmek için hiçbir olasılığı olduğundan

Yani, kabın bir tür küçük Böyle Subview eklemek gerekecek şöyle küçülen davranışı: (önceki sürümleri için alternatif çerçeveler vardır)

[UIView animateWithDuration:.5 animations:^{ 
     container.frame = CGRectMake(10, 17, self.view.frame.size.width-20, self.view.frame.size.height-34); 
    }]; 

Tamam, iOS 7 için geliştiriyoruz varsayalım, bu yüzden burada bazı yeni API'ler faydalanmak gerekir. Şimdi WWDC UIView 'un, bir UIView nesnesini döndüren bir resizableSnapshotViewFromRect:(CGRect) afterScreenUpdates:(BOOL) withCapInsets:(UIEdgeInsets) yöntemi var. Eğer görünüm yönetimini yeniden yazmak istemiyorsanız

[UIView animateWithDuration:.5 animations:^{ 
     container.frame = CGRectMake(10, 17, self.view.frame.size.width-20, self.view.frame.size.height-34); 
    } completion:^(BOOL finished) { 
     UIView *viewToBlur = [self.view resizableSnapshotViewFromRect:container.frame afterScreenUpdates:YES withCapInsets:UIEdgeInsetsZero]; 
    }]; 

, ayrıca ilk, bu şekilde ana görünümde bir fotoğrafını çekmek kap olarak ayarlayın ve sonra yalnızca görüntüyü canlandırabilirsiniz. Ama unutmayın, yakalanan görüntü ile etkileşime giremezsiniz.

Bunu aldığınızda, iki kategori dosyasını this repo'dan indirebilirsiniz (Bunlar WWDC'den geliyor, bu nedenle doğrudan Apple'dan!). Temel olarak, ne yaptıklarını, applyDarkEffect kullanacağımız UIView sınıfına yeni ve güzel yöntemler ekliyorlar. Bunu test etmedim, belki başka bir yöntem ihtiyaçlarınızı daha iyi karşılar.

Neyse biz bloğun içine uygulanması ve belki de bulanık kaplamasını görüntülemek için UIImageView eklerseniz, bu gibi görünmelidir:

[UIView animateWithDuration:.5 animations:^{ 
     container.frame = CGRectMake(10, 17, self.view.frame.size.width-20, self.view.frame.size.height-34); 
    } completion:^(BOOL finished) { 
     UIView *viewToBlur = [self.view resizableSnapshotViewFromRect:container.frame afterScreenUpdates:YES withCapInsets:UIEdgeInsetsZero]; 
     UIImage *image = [viewToBlur applyDarkEffect]; 
     UIImageView *blurredView = [[UIImageView alloc] initWithFrame:self.view.frame]; 
     [self.view addSubview:blurredView]; 

     // optionally also animate this, to achieve an even smoother effect 
     [blurredView setImage:image]; 

    }]; 

Daha sonra üstüne senin SecondViewController 'ın görünümü ekleyebilirsiniz yığın, böylece temsilci yöntemleri çağrılacak. Gelen hesap görünümünün sıçrama etkisi, yeni UIView animasyon yöntemi animateWithDuration:(NSTimeInterval) delay:(NSTimeInterval) usingSpringWithDamping:(CGFloat) initialSpringVelocity:(CGFloat) options:(UIViewAnimationOptions) animations:^(void)animations completion:^(BOOL finished)completion (documentation'da daha fazla)

ile gerçekleştirilebilir. Umarım bu, projenizde size yardımcı olacaktır.

+6

Görüntüyü küçültmek için çerçeveyi değiştirdiğinden şüphem var. Bir ölçek dönüşümü daha muhtemel görünüyor. –

+0

Bunu canlandırmak için bir sürü farklı yol var, ama kapsayıcıyı –

+0

'a ekleyeceksiniz. Bunu deneyeceğim, ama bana 'SecondViewController' adını verdiğimi söyler misiniz? Böylece, yeni oluşturduğumuz "blurView" öğesini hala görebilir miyim? [UIColor clearColor] 'u ayarlayarak, backgroundColor'un onu kesmediğini düşünüyorum. – yoeriboven

İlgili konular