2013-12-13 3 views
5

誰もが現在のビューコントローラのビューを縮小し、それを透過して別のものを置く方法を知っていますか? Tweetbot 3では、ナビゲーションバーの左上にあるアバターをタップすると達成されます。スナップショットを取るべきですか?Tweetbotのような縮小ビューの遷移

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

+0

gifのアニメーションにはどのツールを使用してください。 –

+0

2つを「結合する」ことができます:https://github.com/autresphere/ASDepthModal https://www.cocoacontrols.com/controls/namodalsheetまたはhttps://www.cocoacontrols.com/controls/mzformsheetcontroller – TonyMkenu

答えて

3

あなたがゼロからあなたのビュー・スタックを再構築する必要があります。この効果を達成するために。あなたがアニメーション化できる、ということがあれば今すぐ

@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のフレームを変更する可能性がないよう

だから、あなたは少しのようにコンテナサブビューの種類を追加する必要がありますそのような収縮挙動:

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

さて、私はあなたがiOSの7のために開発されていると仮定し、私たちはここに、いくつかの新しいAPI(以前のバージョンの代替フレームワークがあります)の使用を作ります。 WWDC UIViewUIViewオブジェクトを返すresizableSnapshotViewFromRect:(CGRect) afterScreenUpdates:(BOOL) withCapInsets:(UIEdgeInsets)メソッドを持っています。

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

あなたのビュー管理を書き換えしたくない場合は、まず、あなたのメインビューのスナップショットにこの方法を取るのコンテナに設定して、画像のみをアニメーション化することができます。しかし、キャプチャされたビューと対話できないことを忘れないでください。

これを取得したら、this repoから2つのカテゴリファイルをダウンロードできます(WWDCのものなので、Appleから直接入手してください)。基本的には、UIViewクラスにクールな新しいメソッドを追加します。そのうちapplyDarkEffectを使用します。私はこれをテストしていない、おそらく別の方法はここであなたのニーズに適しています。

とにかく、我々はブロックにそれを実装すると、おそらくもぼやけたオーバーレイを表示するにはUIImageViewを追加する場合、それは次のようになります。

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

    }]; 

あなたは、その後の上にあなたのSecondViewControllerのビューを追加することができますスタックは、それが委任されたメソッドが依然として呼び出されるようになります。入ってくるアカウントビューのバウンス効果は、新しいUIViewアニメーションメソッドanimateWithDuration:(NSTimeInterval) delay:(NSTimeInterval) usingSpringWithDamping:(CGFloat) initialSpringVelocity:(CGFloat) options:(UIViewAnimationOptions) animations:^(void)animations completion:^(BOOL finished)completion(詳細はdocumentationにあります)

あなたのプロジェクトに役立つことを望みます。

+6

私は、彼らがビューを縮小するためにフレームを変更していることを非常に疑う。スケール変換ははるかに可能性が高いようです。 –

+0

これをアニメーション化する方法はたくさんありますが、コンテナを挿入する必要があります。 –

+0

私はそれを試してみますが、 'SecondViewController'をどのように呼び出すか教えてください。 '' UIColor clearColor ''をbackgroundColorでカットしないと設定していると思います。 – yoeriboven

関連する問題