我正在Xcode 4.6中构建一个iOS 6 iPhone应用程序,我想知道实现以下类型弹出窗口的最佳方法:
具体来说,右侧的iPhone屏幕截图,如果用户点击主窗口中的UIView或部分透明的弹出窗口,会出现更详细的信息 - 例如肖像照片和文字数据 - 但原始视图(此处的照片集)仍然可见,定时器/计数器在该视图中继续滴答。
我认为这是一个可能的解决方案iPhone Modal View Smaller that the screen,但它对我不起作用。上面没有显示的是取消按钮,我也打算将其放入popover中,以便用户可以返回到下面的视图。当计时器到期时,详细视图也会消失。
我应该使用presentModalViewController和presenter / present方案,还是使用与storyboard segue的父子视图关系,或者我应该使用loadNibNamed,还是某种黑客来克服iPhone显示非完整版的限制 - 屏幕模态视图?它将覆盖屏幕的大部分,但我想确保下面的视图是可见的并且仍然是活动的,因为它向不在弹出框中的用户提供信息(计时器等)。用户不需要与下面的屏幕进行交互,但我希望它部分可见。
我在我的主故事板中将弹出视图设计为单独的viewcontroller,而不是作为xib文件。连接和出口由接口构建器到我的代码形成,称为ProfileViewController。
警告:我的术语可能不正确且不准确。弹出窗口或弹出窗口可以是UIView,UIViewController,UIWindow,或者以编程方式解决问题的最佳方法。我并不认为它是一种特定的小部件类型,只要功能反映了我正在寻找的东西。
提前感谢您的建议!
答案 0 :(得分:16)
你想实现这个目标吗?
以下是另一个viewControllers
以上的两个vc2
。 childViewController
是vc1
transparent
,UILabel
背景。在您的情况下,您可以使用backgroundColor
black
和alpha = 0.5
放置vc2
顶部。
vc2.m
的所有事件都将在- (IBAction)imageClick
{
vc2 *viewController = [[vc2 alloc]init];
[self addChildViewController:viewController];
viewController.view.frame = self.view.frame;
[self.view addSubview:viewController.view];
viewController.view.alpha = 0;
[viewController didMoveToParentViewController:self];
[UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^
{
viewController.view.alpha = 1;
}
completion:nil];
}
上触发。在图像上单击使用此代码:
vc2.m
并在viewDidLoad
中将viewController
放在self.view.backgroundColor = [UIColor clearColor];
self.view.opaque = YES;
上,以使此viewController
透明。
vc2
使UIView
透明视图会使您的代码变得干净,因为xib
的所有代码都将在一个单独的类中。
修改强>
所以做一件事,首先在category
添加一个backgroundColor
,这将是一个圆形边框,框架将根据您的屏幕截图显示。
对于圆形边框,您可以使用此UIView
。此clearColor
的{{1}}将为- (void)setRoundedBorder:(float) radius borderWidth:(float)borderWidth color:(UIColor*)color
{
CALayer * l = [self layer];
[l setMasksToBounds:YES];
[l setCornerRadius:radius];
// You can even add a border
[l setBorderWidth:borderWidth];
[l setBorderColor:[color CGColor]];
}
:
UILabel/UIView/UIImage
现在放置一个UIView
,其框架等于xib
以上,alpha为0.5,背景为黑色。您可以直接从UIView
执行此操作。无需通过代码设置框架。
然后开始将其他控件放在{{1}}
中答案 1 :(得分:7)
试试这个
// create a new view
UIView *viewPopup=[[UIView alloc]init];
[viewPopup setBackgroundColor:[UIColor blackColor]];
viewPopup.alpha=0.6f;
// add into window
AppDelegate *appdelgateobj=(AppDelegate *)[[UIApplication sharedApplication]delegate];
[appdelgateobj.window addSubview:viewPopup];
[appdelgateobj.window bringSubviewToFront:viewPopup];
答案 2 :(得分:5)
按照以下步骤进行透明视图:
第1步:
第2步:
可能会有所帮助。
答案 3 :(得分:1)
在 .m 文件中添加#import <QuartzCore/QuartzCore.h>
框架并使用以下代码
UIWindow* window = [UIApplication sharedApplication].keyWindow;
self.dimView = [[UIView alloc] initWithFrame:window.bounds];
self.dimView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:.6];
self.dimView.userInteractionEnabled = YES;
[window addSubview:self.dimView];
以上是透明的dimView,其大小类似于窗口。
self.searchTblContainerView = [[UIView alloc] init];
self.searchTblContainerView.frame = CGRectMake(15, (window.frame.size.height - 300) / 2, 290, 300);
self.searchTblContainerView.layer.cornerRadius = 15.f;
self.searchTblContainerView.layer.borderColor = [UIColor blackColor].CGColor; /// set color as per your requirement
self.searchTblContainerView.layer.borderWidth = 2.f;
self.searchTblContainerView.alpha = 0.80; /// set as per your requirement
self.searchTblContainerView.clipsToBounds = YES;
[self.dimView addSubview:self.searchTblContainerView];
上方self.searchTblContainerView
是主视图,其中包含您的整个UIControls
,例如label,textField,Button等...并根据您的要求进行设置。
默认设置隐藏属性self.dimView.hidden = YES;
动画,例如alertView (苹果),显示和隐藏。
以下代码显示dimView。
self.searchTblContainerView.transform = CGAffineTransformMakeScale(0.01, 0.01);
[UIView animateWithDuration:0.30 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.searchTblContainerView.transform = CGAffineTransformIdentity;
self.dimView.hidden = NO;
} completion:^(BOOL finished){}];
UIWindow* window = [UIApplication sharedApplication].keyWindow;
[window bringSubviewToFront:self.dimView];
以下隐藏dimView的代码。
self.searchTblContainerView.transform = CGAffineTransformIdentity;
[UIView animateWithDuration:0.30 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.searchTblContainerView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished){
self.dimView.hidden = YES;
}];
上面的代码是简单的逻辑,可能对你的情况有用。