在iPhone上显示popup式透明窗口的最佳方法?

我正在Xcode 4.6中构build一个iOS 6 iPhone应用程序,并且想知道实现以下types的popup窗口的最佳方法:

PopoverScreenshot

具体来说,在右边的iPhone屏幕截图中,如果用户点击主窗口中的脸部或UIView,则会出现部分透明的popup窗口,其中包含更详细的信息(如肖像照片和文本数据),但是原始视图(这里的照片集)仍然可见,计时器/计数器在这个视图中继续下去。

我认为这将是一个可能的解决schemeiPhone模式查看更小的屏幕,但它不适用于我。 上面没有显示的是一个取消button,我也打算放在popup窗口,以便用户可以返回到下面的视图。 当计时器到期时,详细视图也消失。

我应该使用presentModalViewController和演示者/呈现scheme,还是使用与storyboard segue的父子视图关系,或者我应该使用loadNibNamed还是某种黑客来克服iPhone对显示非全屏模式的限制视图? 它将覆盖大部分屏幕,但是我想确保下面的视图是可见的并且仍然是活动的,因为它向不在popup窗口(计时器等)中的用户提供信息。 用户不需要与下面的屏幕交互,但我希望它是部分可见的。

我devisepopup视图作为一个单独的视图控制器在我的主要故事板,而不是一个xib文件。 连接和sockets由接口生成器形成我的代码,称为ProfileViewController。

警告:我的术语可能不正确,不准确。 popup窗口或popup窗口可以是UIView,UIViewController,UIWindow,或其他任何最好的编程方式来解决问题。 我没有把它作为一个特定的部件types,只要function反映我正在寻找的东西。

在此先感谢您的build议!

你想达到这个目标吗?

在这里输入图像说明

这里有两个不同的viewControllers一个高于另一个。 childViewController是具有transparent背景的childViewController 。 在你的情况下,你可以把一个UILabel顶部的backgroundColor blackalpha = 0.5

vc2.m所有事件都会在vc2.mvc2.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透明视图将使您的代码干净,所有viewController的代码将在一个单独的类。

编辑

所以,做一件事,首先添加一个UIView到你的xib这将是一个圆形的边框和框架将是你想要的截图。

对于圆angular边框,您可以使用此category 。 这个UIView backgroundColor将是clearColor

 - (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和alpha是0.5的黑色背景颜色。 你可以直接从xib做到这xib 。 无需通过代码设置框架。

然后开始把你的其他控件在UIView

尝试这个

 // 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]; 

请按以下步骤进行透明视图:

步骤1: 在这里输入图像说明

第2步:

在这里输入图像说明

  • 每当你想要它Transpertview.hidden = NO:
  • 每当你不想要的时候Transpertview.hidden = YES:

可能会有帮助。

.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 ,如标签,textField,button等,并根据您的要求设置它的主视图。

默认情况下设置隐藏的属性self.dimView.hidden = YES; 并通过像alertView (苹果)这样的animation 显示和隐藏

以下代码用于显示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; }]; 

上面的代码是简单的逻辑,可能对你的情况有用。