REFrostedViewController 2.4.8

REFrostedViewController 2.4.8

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2015年4月

Roman Efimov 维护。



  • 作者
  • Roman Efimov

在您的视图控制器上方出现的类似于 iOS 7/8 风格的模糊视图控制器。

REFrostedViewController Screenshot REFrostedViewController Screenshot

要求

  • Xcode 6 或更高版本
  • Apple LLVM 编译器
  • iOS 6.0 或更高版本
  • ARC

演示

在 Xcode 中构建并运行 REFrostedViewControllerExample 项目,以查看 REFrostedViewController 的实际使用情况。

安装

手动安装

您需要做的就是将 REFrostedViewController 文件拖放到您的项目中,并将 #include "REFrostedViewController.h" 添加到将要使用它的类的顶部。

您的项目必须链接到 Accelerate 框架。

示例用法

在您的 AppDelegate 的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中创建视图控制器,并分配内容和菜单视图控制器。

// Create content and menu controllers
//
DEMONavigationController *navigationController = [[DEMONavigationController alloc] initWithRootViewController:[[DEMOHomeViewController alloc] init]];
DEMOMenuViewController *menuController = [[DEMOMenuViewController alloc] initWithStyle:UITableViewStylePlain];

// Create frosted view controller
//
REFrostedViewController *frostedViewController = [[REFrostedViewController alloc] initWithContentViewController:navigationController menuViewController:menuController];
frostedViewController.direction = REFrostedViewControllerDirectionLeft;

// Make it a root controller
//
self.window.rootViewController = frostedViewController;

您可以手动展示它

[self.frostedViewController presentMenuViewController];

或使用一个滑动手势识别器

- (void)panGestureRecognized:(UIPanGestureRecognizer *)sender
{
    [self.frostedViewController panGestureRecognized:sender];
}

实时模糊

默认情况下,在 iOS 7 下启用实时模糊。实时模糊是通过使用 UIToolbar 作为背景视图完成的,这意味着当您更改其着色颜色时,它就会变为无饱和度。这就是它在 iOS 7 上工作的方式。iPhone 4 不支持实时模糊,并回退到透明视图。这同样适用于用户设备上设置了高对比度可访问性设置开启的情况。要禁用实时模糊,将 liveBlur 属性设置为 NO

Storyboard 示例

  1. 创建一个 REFrostedViewController 的子类。在此示例中,我们称其为 DEMORootViewController
  2. 在 Storyboard 中指定根视图的所有者为 DEMORootViewController
  3. 请确保在 DEMORootViewController.h 中包含 #import "REFrostedViewController.h"
  4. 向您的 Storyboard 添加更多视图控制器,并为它们指定 "menuController" 和 "contentController" 标识符。注意,在新版 XCode 中,标识符被称为 "Storyboard ID",可以在 Identity 检查器中找到。
  5. DEMORootViewController.m 中添加一个名为 awakeFromNib 的方法,代码如下
- (void)awakeFromNib
{
    self.contentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"contentController"];
    self.menuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"menuController"];
}

自定义

您可以根据下述内容自定义 REFrostedViewController 的以下属性

@property (strong, readonly, nonatomic) UIPanGestureRecognizer *panGestureRecognizer;
@property (assign, readwrite, nonatomic) BOOL panGestureEnabled;
@property (assign, readwrite, nonatomic) REFrostedViewControllerDirection direction;
@property (assign, readwrite, nonatomic) CGFloat backgroundFadeAmount;
@property (strong, readwrite, nonatomic) UIColor *blurTintColor; // Used only when live blur is off
@property (assign, readwrite, nonatomic) CGFloat blurRadius; // Used only when live blur is off
@property (assign, readwrite, nonatomic) CGFloat blurSaturationDeltaFactor; // Used only when live blur is off
@property (assign, readwrite, nonatomic) NSTimeInterval animationDuration;
@property (assign, readwrite, nonatomic) BOOL limitMenuViewSize;
@property (assign, readwrite, nonatomic) CGSize menuViewSize;
@property (assign, readwrite, nonatomic) BOOL liveBlur; // iOS 7 only
@property (assign, readwrite, nonatomic) REFrostedViewControllerLiveBackgroundStyle liveBlurBackgroundStyle; // iOS 7 only

鸣谢

本作品受到Dribbble上菜单概念投稿的启发,作者Jackie Tran

用于静态模糊的模糊算法来源于2013年WWDC的第208场会议:“iOS用户界面设计新功能”。

联系信息

Roman Efimov

许可协议

REFrostedViewController遵循MIT许可协议。

版权所有 © 2013 Roman Efimov。

在此特此授予任何获得此软件及相关文档文件(以下简称“软件”)副本的人自由使用的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或销售软件的副本,并允许软件的接收者按照以下条件进行处理:

上述版权声明和本许可协议应包含在软件的任何副本或主要部分中。

本软件按“现状”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权所有者不应对任何索赔、损失或其他责任负责,无论这种责任是以合同、侵权或其他方式产生的,与软件或其使用或其他交易有关。