EDITED:Дисплей вид анимации в ViewController
я создал слайд в меню для моего зрения, и она работает, как я хотел, это был оригинальный путеводитель, который я использовал.
http://www.youtube.com/watch?v=79ZQDzzOHLk
Моя цель состояла в том, чтобы получить это запрограммировано один раз в классе и заставить его работать на любом контроллере представления, что я решил назвать его.
Благодаря @ harsh.prasad и некоторые дополнительные исследования, мне удалось заставить это работать до такой степени, что он работает так, как я хочу, отдельно от привязки кнопок к нему.
Итак, чтобы обновить этот вопрос в надежде, он может помочь кому-то другому.
Это то, что я сделал:
Я создал класс UIView и назвал его MenuOne.
MenuOne.h
#import <UIKit/UIKit.h>
@interface TFMenuOne : UIView {
// Pop Up Menu
IBOutlet UIScrollView *scrollView;
IBOutlet UIButton *openMenu;
int draw1;
IBOutlet UIButton *backButton;
}
// Pop Up Menu
- (IBAction)openMenu_clicked:(id)sender;
// Reset draw1 to 0
- (void) resetView: (id) sender;
@property (retain, nonatomic) IBOutlet UIScrollView *scrollView;
@end
MenuOne.m
#import "TFMenuOne.h"
@implementation TFMenuOne
@synthesize scrollView;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
draw1 = 0;
scrollView = [[UIScrollView alloc] init];
[scrollView setBackgroundColor:[UIColor whiteColor]];
[scrollView setFrame:CGRectMake(0, 315, 568, 5)];
[scrollView setContentSize:CGSizeMake(568, 5)];
backButton = [[UIButton alloc] init];
[backButton setBackgroundColor:[UIColor greenColor]];
backButton.frame = CGRectMake(224, 350, 120, 30);
openMenu = [[UIButton alloc] init];
[openMenu setBackgroundImage:[UIImage imageNamed:@"[email protected]"]
forState:UIControlStateNormal];
openMenu.adjustsImageWhenHighlighted = NO;
[openMenu addTarget:self
action:@selector(openMenu_clicked:)
forControlEvents:UIControlEventTouchUpInside];
openMenu.frame = CGRectMake(256, 269, 64, 46);
[self addSubview:scrollView];
[self addSubview:backButton];
[self addSubview:openMenu];
}
return self;
}
// Allow for touch even through transparent View class
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
for (UIView *view in self.subviews) {
if (!view.hidden && view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event])
return YES;
}
return NO;
}
- (void) resetView: (id) sender {
draw1 = 1;
[self openMenu_clicked:sender];
}
- (IBAction)openMenu_clicked:(id)sender {
if (draw1 == 0) {
draw1 = 1;
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
scrollView.frame = CGRectMake(0, 260, 568, 60);
} completion:^(BOOL finished) {
}];
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
openMenu.frame = CGRectMake(256, 214, 64, 46);
} completion:^(BOOL finished) {
}];
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
backButton.frame = CGRectMake(224, 275, 120, 30);
} completion:^(BOOL finished) {
}];
} else {
draw1 = 0;
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
scrollView.frame = CGRectMake(0, 315, 568, 5);
} completion:^(BOOL finished) {
}];
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
openMenu.frame = CGRectMake(256, 269, 64, 46);
} completion:^(BOOL finished) {
}];
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
backButton.frame = CGRectMake(224, 350, 120, 30);
} completion:^(BOOL finished) {
}];
}
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
После многих проб и ошибок, чтобы получить этот класс UIView, чтобы появиться на нескольких ViewControllers я называю мнение, как это в файле m контроллера вида. Препятствиями, с которыми я столкнулся, было то, что меню откроется, но когда я покинул контроллер вида, чтобы перейти к другому контроллеру представления, меню будет находиться в состоянии, в котором он находился, когда я уйду, он не будет возвращаться обратно в закрытое состояние. Ниже приведено приведенное ниже код, что опять-таки спасибо @ harsh.prasad. Мне также удалось получить меню для анимации в
@interface TFMapViewController()
{
TFMenuOne *menuView;
}
@end
@implementation TFMapViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[menuView resetView:nil];
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
menuView = [[TFMenuOne alloc] initWithFrame:CGRectMake(0, 51, 568, 320)];
[self.view addSubview:menuView];
}
- (void) viewDidAppear:(BOOL)animated
{
[UIView animateWithDuration:0.5 delay:0.5 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
menuView.frame = CGRectMake(0, 0, 568, 320);
} completion:^(BOOL finished) {
}];
}
- (void) viewDidDisappear:(BOOL)animated
{
[menuView resetView:nil];
[UIView animateWithDuration:0.0 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
menuView.frame = CGRectMake(0, 51, 568, 320);
} completion:^(BOOL finished) {
}];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// Allows for Exit button to work
- (IBAction)returned:(UIStoryboardSegue *)segue {
}
@end
Вы должны обязательно посмотреть [MFSideMenu] (https://github.com/mikefrederick/MFSideMenu) –
Спасибо Janak, но это не то, что я ищу. Я просмотрел меню слайдов, но это дает другой эффект тому, что я хочу - я хочу, чтобы мое меню появлялось над контроллером представления, а не сзади, и я хочу иметь возможность добавлять в него кнопки и изображения, а не только текст меню. Я уже достиг того, чего хочу, но хотел бы знать, есть ли эффективный способ не повторять один и тот же код на каждом контроллере. Спасибо, в любом случае. –