可滑动的UIView菜单响应UIGestureRecognizer

时间:2012-07-26 23:17:38

标签: iphone ios uiview uiswipegesturerecognizer

所以我试图用这个视图做的就是让我可以上下滑动UIView(menuView)进出屏幕。所以在storyboard / IB中,我放置了一个UIView并将其连接到文件所有者和所有爵士乐。然后我输入以下代码的程序。问题是,当nib加载时,它不会将UIView放在应该放在首位,然后滑动不起作用。我用一个按钮尝试了这种编程方法,它工作正常。提前感谢您对此主题的任何帮助。

.h文件

UIView *menuView;
}
@property (strong, nonatomic) IBOutlet UIView *menuView;

.m文件

@synthesize menuView;



- (void)viewDidLoad
{
[super viewDidLoad];

// Do any additional setup after loading the view.

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc]     initWithTarget:self action:@selector(swipe:)];
[swipeGesture setDirection:UISwipeGestureRecognizerDirectionDown];
[self.view addGestureRecognizer:swipeGesture];


menuView = [[UIView alloc] initWithFrame:CGRectMake(0, -80, 320, 80)];
[menuView setFrame:CGRectMake(0, -80, 320, 80)];

[self.view addSubview:menuView];
}


-(void)swipe:(UISwipeGestureRecognizer*)sender {
[UIView animateWithDuration:0.5 animations:^{
    [menuView setFrame:CGRectMake(0, 0, 320, 80)];
}];
    }



 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
 }

1 个答案:

答案 0 :(得分:0)

您已将menuView设置为storyBoard / IB outlet。这意味着xib / nib / storyboard正在执行alloc-init和初始框架。所以你应该删除这一行:

menuView = [[UIView alloc] initWithFrame:CGRectMake(0, -80, 320, 80)];

您还可以从viewdidLoad中删除下一行:

[menuView setFrame:CGRectMake(0, -80, 320, 80)];

这是多余的。它已经由“initWithFrame”完成 - 它已经由nib完成。

另一方面,在笔尖上放置屏幕外的东西可能很困难。因此,您实际上可以恢复setFrame:行 - 但在 viewWillAppear 而不是viewDidLoad。在 nib已经完成它之后,viewWillAppear被称为,因此笔尖不会妨碍你的重构。

进行这些更改,如果“所有爵士乐”包括将menuView连接到参考插座,那么你应该不错。