在iPhone上显示popup式透明窗口的最佳方法?
我正在Xcode 4.6中构build一个iOS 6 iPhone应用程序,并且想知道实现以下types的popup窗口的最佳方法:
具体来说,在右边的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
black
和alpha = 0.5
。
vc2.m
所有事件都会在vc2.m
上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
透明视图将使您的代码干净,所有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; }];
上面的代码是简单的逻辑,可能对你的情况有用。