【发布时间】:2011-02-24 11:19:47
【问题描述】:
有没有一种简单的方法来完成这种弹出窗口(就像 UIPopoverController 一样)或者我应该从头开始构建它?
【问题讨论】:
标签: ios uiview popup window uipopovercontroller
有没有一种简单的方法来完成这种弹出窗口(就像 UIPopoverController 一样)或者我应该从头开始构建它?
【问题讨论】:
标签: ios uiview popup window uipopovercontroller
你可以很容易地从头开始制作这样的东西。诀窍是让您的弹出视图控制器具有全屏透明层
从你的主要观点:
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];
如果你想要过渡效果,现在只需实现 viewWillAppear:
- (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];
}
}
对于奖励积分,您可以将透明背景设置为控件,并让它检测弹出窗口何时消失的触摸。我使用界面生成器调用了一个调用 slideOut 的操作。
【讨论】: