iOS 7半透明模式视图控制器
iOS 7上的App Store应用程序使用磨砂玻璃效果,可以看到后面的视图。这是使用iOS 7内置的API还是自定义代码。我希望是前者,但我在文档中看不到任何明显的参考。显而易见的事情(比如在模态视图上设置alpha属性)似乎没有任何效果 要查看示例,请打开App Store应用程序并按下右上角的按钮iOS 7半透明模式视图控制器,ios,objective-c,uinavigationcontroller,ios7,presentmodalviewcontroller,Ios,Objective C,Uinavigationcontroller,Ios7,Presentmodalviewcontroller,iOS 7上的App Store应用程序使用磨砂玻璃效果,可以看到后面的视图。这是使用iOS 7内置的API还是自定义代码。我希望是前者,但我在文档中看不到任何明显的参考。显而易见的事情(比如在模态视图上设置alpha属性)似乎没有任何效果 要查看示例,请打开App Store应用程序并按下右上角的按钮 iOS 7 SDK中没有允许您“冻结”基线视图控制器的API 我所做的是将参考底图视图渲染为一个图像,然后对其进行磨砂,并将其设置为当前视图的背景 苹果提供了一个很好的例子: 正如@rckoe
iOS 7 SDK中没有允许您“冻结”基线视图控制器的API 我所做的是将参考底图视图渲染为一个图像,然后对其进行磨砂,并将其设置为当前视图的背景 苹果提供了一个很好的例子:
正如@rckoenes所说,没有苹果提供的框架来实现这一效果。但有些人已经建立了很好的替代方案,例如:
在iOS 5和iOS 6上也适用的两种替代方法: FXBlurView:
iOS RealtimeBlur:我已将模糊视图控制器的照片上传到[GitHub][1]。它还附带了一个segue子类,因此您可以在故事板中使用它
存储库:随着iOS 8.0的发布,不再需要获取图像和模糊图像。如前所述,您可以使用with
在iOS 8之前可用的解决方案 我想就rckoenes的回答作进一步说明: 正如所强调的,您可以通过以下方式创建此效果:
听起来需要做很多工作,但实际上做得相当直接: 1。创建UIView的类别并添加以下方法:
-(UIImage *)convertViewToImage
{
UIGraphicsBeginImageContext(self.bounds.size);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
extension UIView {
func convertViewToImage() -> UIImage{
UIGraphicsBeginImageContext(self.bounds.size);
self.drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
return image;
}
}
2。制作当前视图的图像,并使用()将其模糊。
3。将其设置为覆盖层的背景。
-(void)viewDidLoad
{
self.view.backgroundColor = [UIColor clearColor];
UIImageView* backView = [[UIImageView alloc] initWithFrame:self.view.frame];
backView.image = imageOfUnderlyingView;
backView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
[self.view addSubview:backView];
}
let backView = UIImageView(frame: self.view.frame)
backView.image = imageOfUnderlyingView
backView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.5)
view.addSubview(backView)
快速简便的解决方案
有了XIB支持,您可以为老学童使用
您可以将viewController添加为子viewController并创建自定义动画,而不是将其显示为modalView。然后,您只需在
viewDidLoad
中将viewController的默认视图更改为UIToolBar
这将允许您尽可能接近地模拟appstore的模糊模式视图。自iOS 8以来,这项功能可以:
let vc = UIViewController()
vc.view = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
vc.modalPresentationStyle = .OverFullScreen
let nc = UINavigationController(rootViewController: vc)
nc.modalPresentationStyle = .OverFullScreen
presentViewController(nc, animated: true, completion: nil)
关键是
.OverFullScreen
标志,并确保ViewController具有第一个可见视图的模糊UIVisualEffectView。刚刚在Swift中重新实现了Sebastian Hojas解决方案:
1。创建UIView扩展并添加以下方法:
-(UIImage *)convertViewToImage
{
UIGraphicsBeginImageContext(self.bounds.size);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
extension UIView {
func convertViewToImage() -> UIImage{
UIGraphicsBeginImageContext(self.bounds.size);
self.drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
return image;
}
}
2。制作当前视图的图像,并使用苹果的图像效果对其进行模糊处理(我在Swift中找到了这一点的重新实现:
3.将其设置为覆盖的背景。
-(void)viewDidLoad
{
self.view.backgroundColor = [UIColor clearColor];
UIImageView* backView = [[UIImageView alloc] initWithFrame:self.view.frame];
backView.image = imageOfUnderlyingView;
backView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
[self.view addSubview:backView];
}
let backView = UIImageView(frame: self.view.frame)
backView.image = imageOfUnderlyingView
backView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.5)
view.addSubview(backView)
我认为这是一个模式视图控制器的最简单的解决方案,它可以用一个漂亮的模糊覆盖所有内容(iOS8)
使用Interface Builder实现这一点(基于Andrew Plummer的答案)的更简单的方法(也消除了Andrews答案中出现的副作用):
- 在IB中,将视觉效果视图添加到其他视图下的视图控制器中
- 从视觉效果视图到顶部(父)视图进行顶部、底部、左侧、右侧约束,将所有约束设置为0
- 设置模糊样式
- 添加显示新fancy View控制器的代码:
实际上,第二行和第三行非常重要,否则控制器将闪烁然后变黑。您可以使用UIToolbar作为背景。 默认情况下,UIToolbar的高度为50px。 在UIToolbar上添加自动布局约束。 然后选择“高度约束”并对其进行修改 层次结构如下所示:
UIView -> clear colour for background.
- UIToolbar
- Other contents.
苹果发布了这些效果的类别。这些类别应该手动添加到项目中,并且它支持iOS7。在模态启动时,你如何保持back ViewController?在我的例子中,back VC消失了。你不知道,因为back ViewController只是模态ViewController上的一个磨砂图像。正在使用h动画,并由UIToolbar view app store safe支持?如果演示视图控制器是uinavigationcontroller,它是否有效?直接链接到图像效果Category@OneManBand添加了链接。谢谢!这不会像应用商店的模态视图控制器那样动态模糊下面的内容-包括动画特色应用程序。自iOS 8以来,终于有了一种通过
UIModalPresentationOverCurrentContext
实现此效果的直接方法。请参见下面的Andrew Plummer、mxcl和Andrey Konstantinov的回答。这不会保持模糊?使用iOS 8方法,背景会在过渡时模糊,并透明地显示第一视图控制器,但是模态视图控制器在完全加载后变为黑色。覆盖似乎将添加到顶视图层上。这不会保持模糊?使用iOS 8方法,背景在过渡时模糊,并透明地显示第一个视图控制器,但模态视图控制器在完全加载后变为黑色。-Crashalotedit@Crashalot您是否更改了任何设置,如将UIModalPresentationOverCurrentContext更改为全屏?要添加@Crashalot,如果您不使用该模式演示样式,则在模式启动后,它将停止“显示”下面的VC,因此它将变为“黑色”(下面没有任何内容)我喜欢你的工作question@Ian-你应该接受Sebastian Hojas的回答什么是主按钮查看控制器?@christijk应该是FancyView控制器(现在是)。谢谢你指出。
UIView -> clear colour for background.
- UIToolbar
- Other contents.