上図のような機能を実装したい。サイドメニュー(青いパネル)は、私が管理したボタンを押すと左側から開くはずですが、私の問題は、他のビューで再利用できるようにこのサイドメニューを作成する必要があることです
しかし、他のビューで再利用できるように実装する方法がわかりません。
誰かアイデアがあれば共有してください。
上図のような機能を実装したい。サイドメニュー(青いパネル)は、私が管理したボタンを押すと左側から開くはずですが、私の問題は、他のビューで再利用できるようにこのサイドメニューを作成する必要があることです
しかし、他のビューで再利用できるように実装する方法がわかりません。
誰かアイデアがあれば共有してください。
すべての UIViewController に対してこのような独自のトランジションが必要な場合は、UIViewController へのカテゴリを作成できます。
これは、インターフェイスを実行する方法です。
*.h ファイル:
#import <UIKit/UIKit.h>
@interface UIViewController(Transitions)
- (void) presentViewController:(UIViewController *)viewController withPushDirection: (NSString *) direction;
- (void) dismissViewControllerWithPushDirection:(NSString *) direction;
@end
*.m ファイル
#import "UIViewControllerWithTransitions.h"
#import <QuartzCore/QuartzCore.h>
@implementation UIViewController(Transitions)
- (void) presentViewController:(UIViewController *)viewController withPushDirection: (NSString *) direction {
[CATransaction begin];
CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = direction;
transition.duration = 0.25f;
transition.fillMode = kCAFillModeForwards;
transition.removedOnCompletion = YES;
[[UIApplication sharedApplication].keyWindow.layer addAnimation:transition forKey:@"transition"];
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[CATransaction setCompletionBlock: ^ {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(transition.duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ {
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
});
}];
[self presentViewController:viewController animated:NO completion:NULL];
[CATransaction commit];
}
- (void) dismissViewControllerWithPushDirection:(NSString *) direction {
[CATransaction begin];
CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = direction;
transition.duration = 0.25f;
transition.fillMode = kCAFillModeForwards;
transition.removedOnCompletion = YES;
[[UIApplication sharedApplication].keyWindow.layer addAnimation:transition forKey:@"transition"];
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[CATransaction setCompletionBlock: ^ {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(transition.duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ {
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
});
}];
[self dismissViewControllerAnimated:NO completion:NULL];
[CATransaction commit];
}
@end
これはサンプル呼び出しです:
[self presentViewController: myVC withPushDirection:@"fromRight"];
ビューをウィンドウに追加できます...詳細については、以下のリンクを参照してください:)
次のようなものを使用します。
[UIView transitionWithView:self.view duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{["Set your view's new frame here"];} completion:nil];
または、ビューのフレームを可視領域外のデフォルトの場所に設定してから、アニメーション ブロックでフレームをスライドアウト後に最終的に配置する場所に設定することができます。
[UIView beginAnimation];
//Your new frame here
[UIView commitAnimation];
このようなもの..それに応じてグーグル...
私のプロジェクトで実装するこのタイプのロジックを最初に見てください..
ここで、必要に応じてビューを開いて閉じるためのブール値を指定します
-(IBAction)yourButtonOpen_Clicked:(id)sender
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:viewObjectSlider cache:YES];
viewObjectSlider.frame=CGRectMake(828, 0, 196, 694);// set your frame here
[UIView commitAnimations];
}
-(IBAction)yourButtonClosed_Click:(id)sender
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:viewObjectSlider cache:YES];
viewObjectSlider.frame=CGRectMake(984, 0, 196, 694);//set yourFrame
[UIView commitAnimations];
}
私はこのログインをiPadアプリケーションで使用しているので、このタイプのフレームをiPhoneに与えることができます:)
また、この次のリンクも参照してください。要件と同じデモが 1 つ表示されます。
http://www.highwaystech.com/index.php/source-code/ios/360-iiviewdeckcontroller-for-ios.html