現在、アプリのベースとしてThree20TTLauncherを使用しています。
ただし、TTLaunchItemをタップすると、マップされたURLにジャンプします。
フェイスブックアプリが使用するのと同じ「拡張」アニメーション/トランジションを使用できる方法はありますか?
現在、アプリのベースとしてThree20TTLauncherを使用しています。
ただし、TTLaunchItemをタップすると、マップされたURLにジャンプします。
フェイスブックアプリが使用するのと同じ「拡張」アニメーション/トランジションを使用できる方法はありますか?
TTLauncherViewで次のようにURLを開いていると仮定します。
- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item
{
[[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:item.URL] applyAnimated:YES]];
}
アニメーションでURLを開くには、ビューをアニメーション化してから、次のようにURLを開く必要があります。
まず、URLを保持するための新しい変数が必要です。LauncherView.hファイルに移動し、新しいファイルを定義しますNSString *_urlToOpen;
.mファイルに戻ると、さらに2つのメソッドが必要です。1つはアニメーション部分(ビューをアニメーション化するだけ)用で、もう1つはアニメーションが終了したときに呼び出されます。
最初にアニメーションのコードを投稿し、後で説明します。
-(void)animateTransition:(NSNumber *)duration {
self.view.userInteractionEnabled=NO;
viewController = [[[TTNavigator navigator] viewControllerForURL:_urlToOpen] retain];
[[self view] addSubview:viewController.view];
viewController.view.frame=[[UIScreen mainScreen] bounds];
viewController.view.transform=CGAffineTransformMakeScale(0.01, 0.01);
viewController.view.hidden=false;
[UIView beginAnimations:@"animationExpand" context:NULL];
[UIView setAnimationDuration:[duration floatValue]];
viewController.view.transform=CGAffineTransformMakeScale(1, 1);
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];
}
まず、userInteractionEnabledをNOに設定して、アニメーションの実行中にユーザーがボタンをタップできないようにします。次に、TTNavigatorからアニメーションで開きたいviewControllerを取得し、これを実際のビュー(ランチャービュー)に追加します。新しいビューのフレームを画面の境界に定義し、画面の中央で非常に小さいサイズに縮小します。次に、ビューを元のサイズ(画面の境界)に拡大するようにアニメーションを設定し、DidStopSelectorを使用してアニメーションを開始します。
DidStopSelectorは次のようになります。
-(void)animationDidStop:(NSString *)animationID finished:(BOOL)finished context:(void *)context{
self.view.userInteractionEnabled=YES;
viewController.view.hidden=true;
[viewController.view removeFromSuperview];
[viewController release];
[[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:_urlToOpen] applyAnimated:NO]];
}
最初の行は自明です。次に、スーパービューからビューを削除してURLを開くだけですが、トランジションアニメーションはありません。
最後に、メソッドを編集- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item
してURLを新しい変数に保存し、animateTransitionメソッドを呼び出します。
- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item
{
_urlToOpen = [NSString stringWithString:item.URL];
[self performSelector:@selector(animateTransition:) withObject:[NSNumber numberWithFloat: 0.60f]];
}
同じことが他の方向でも機能しますが、ユーザーがナビゲーションバーの戻るボタンをタップした場合に何が起こるかを気にする必要があります。通常の動作は、標準のスライドアニメーションでアニメーション化することです。
この回答は、Three20Googleグループのフォーラムスレッドに基づいています。ここで見つけてください。
私は自分のプロジェクトの1つで似たようなものを書かなければなりませんでした。
https://github.com/aporat/TTLauncherView_ExpandViewTransitionsを参照してください
このサンプルプロジェクトには、ランチャービューとFacebookランチャーの戻るボタンに戻るときの縮小効果も含まれています