2013-12-13 4 views
5

Weiß jemand, wie man die Ansicht des gegenwärtigen Ansichtkontrollers erreicht, um zu schrumpfen und einen anderen über ihn mit einer Transparenz zu setzen? Es wird in Tweetbot 3 erreicht, wenn Sie auf Ihren Avatar oben links in der Navigationsleiste tippen. Soll ich zum Beispiel einen Schnappschuss machen?Tweetbot wie Schrumpfansicht Übergang

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

+0

Welches Tool verwenden Sie bitte für die gif anim? –

+0

können Sie versuchen, die beiden zu kombinieren: https://github.com/atresphere/ASDepthModal mit https://www.coacoacontrols.com/controls/namodalsheet oder https://www.coacoacontrols.com/controls/mzformsheetcontroller – TonyMkenu

Antwort

3

Um diesen Effekt zu erreichen, müssen Sie von Grund auf Ihre Ansicht Stapel wieder aufzubauen.

So wie es keine Möglichkeit gibt, die viewController.view ‚s Rahmen zu ändern, werden Sie eine Art Container hinzufügen, um ein wenig wie diese Subview:

@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 
} 

Nun, wenn Sie das haben, können Sie animieren das Schrumpfverhalten wie folgt:

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

okay, ich nehme an, Sie für iOS entwickeln 7, so dass wir die Verwendung einiger neuer APIs hier (für frühere Versionen gibt es alternative Frameworks) machen. Jetzt seit WWDC UIView hat eine resizableSnapshotViewFromRect:(CGRect) afterScreenUpdates:(BOOL) withCapInsets:(UIEdgeInsets) Methode, die ein einzelnes UIView Objekt zurückgibt.

[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]; 
    }]; 

Wenn Sie die Ansicht Verwaltung nicht neu schreiben möchten, können Sie auch nehmen Sie die erste auf diese Weise eine Momentaufnahme Ihrer Hauptansicht, stellen Sie den Behälter und dann nur das Bild animieren. Aber denken Sie daran, dass Sie dann nicht mit der aufgenommenen Ansicht interagieren können.

Wenn Sie das haben, können Sie die beiden Kategorie-Dateien von this Repo herunterladen (Sie sind von der WWDC, also direkt von Apple!). Im Grunde genommen fügen sie der Klasse UIView einige coole neue Methoden hinzu, von denen wir applyDarkEffect verwenden werden. Ich habe das nicht getestet, vielleicht passt eine andere Methode hier besser zu Ihren Bedürfnissen.

Anyways, wenn wir, dass in den Block implementieren und vielleicht auch hinzufügen, eine UIImageView die unscharfe Overlay angezeigt werden, sollte es in etwa so aussehen:

[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]; 

    }]; 

Sie können dann Ihre SecondViewController ‚s oben-Ansicht von der Stack, so dass seine Delegiertenmethoden immer noch aufgerufen werden. Der Bounce-Effekt der eingehenden Account-Ansicht kann über die neue UIView-Animationsmethode animateWithDuration:(NSTimeInterval) delay:(NSTimeInterval) usingSpringWithDamping:(CGFloat) initialSpringVelocity:(CGFloat) options:(UIViewAnimationOptions) animations:^(void)animations completion:^(BOOL finished)completion (mehr dazu in der documentation)

erreicht werden Ich hoffe, dass das Ihnen bei Ihrem Projekt helfen wird.

+6

Ich bezweifle stark, dass sie den Frame ändern, um die Ansicht zu verkleinern. Eine Maßstabsumwandlung erscheint viel wahrscheinlicher. –

+0

Es gibt eine Reihe von verschiedenen Möglichkeiten, es zu animieren, aber Sie müssen den Container Ansicht –

+0

einfügen Ich werde es ausprobieren, aber können Sie mir sagen, wie ich 'SecondViewController' aufrufen, so kann ich immer noch die" Verschwommene Ansicht "die wir gerade erstellt haben? Ich nehme an, dass '[UIColor clearColor] 'so eingestellt ist, dass es von backgroundColor nicht abgeschnitten wird. – yoeriboven