WYPopoverController 0.3.9

WYPopoverController 0.3.9

测试经过测试
lang语言 Obj-CObjective C
许可证 MIT
发布最新发布2016年2月

Sam McEwanVitaly Samoylik维护。



  • Nicolas CHENG,Sam McEwan 和 Vitaly Samoylik

此分支 正在积极维护。似乎 原始分支 已被放弃。

WYPopoverController 用于在 iPhone / iPad 设备上展示弹窗内容。非常可定制。

屏幕截图


功能


  • UIAppearance 支持
  • 与 UIPopoverController 一样工作
  • 也与 blocks 工作良好
  • 动画选项
  • 自动方向支持
  • UIStoryboard 支持
  • 键盘显示/隐藏支持
  • iOS 6 & 7 支持
  • UIAccessibility 支持
  • 主题支持

UIAppearance 支持


属性 类型 默认值(iOS 6) 默认值(iOS 7)
usesRoundedArrow BOOL NO YES
tintColor UIColor nil nil
arrowBase NSUInteger 42 25
arrowHeight NSUInteger 18 13
borderWidth NSUInteger 6 0
outerCornerRadius NSUInteger 8 5
innerCornerRadius NSUInteger 6 0
viewContentInsets UIEdgeInsets { 3, 0, 0, 0 } UIEdgeInsetsZero
fillTopColor UIColor #373f47ff #f4f4f4ff
fillBottomColor UIColor #3b434cff #f4f4f4ff
glossShadowColor UIColor #c3c5c77f #transparent
glossShadowBlurRadius NSUInteger 0 0
glossShadowOffset CGSize { 0, 1.5 } CGSizeZero
outerShadowColor UIColor #000000bf #transparent
outerShadowBlurRadius NSUInteger 8 0
outerShadowOffset CGSize { 0, 2 } CGSizeZero
innerShadowColor UIColor #000000bf #transparent
innerShadowBlurRadius NSUInteger 2 0
innerShadowOffset CGSize { 0, 1 } CGSizeZero
minOuterCornerRadius NSUInteger 0 0
innerStrokeColor UIColor #262c31ff #transparent
outerStrokeColor UIColor #262c31ff #transparent
dimsBackgroundViewsTintColor BOOL YES YES
箭头 & 边框

usesRoundedArrow(默认启用)生成一个平滑的箭头。将其设置为 NO,则恢复为旧式的尖锐箭头。

, ,

圆角 & 视图层内容内边距

, ,

描边 & 填充

, , ,

光泽

, ,

外部

, ,

内部

, ,

着色

dimsBackgroundViewsTintColor用于控制覆盖层后面的视图是否暗化其着色颜色。

与UIPopoverController类似工作


passthroughViews

一个视图数组,在弹出菜单可见时,用户可以与之交互。

wantsDefaultContentAppearance

确定弹出菜单是否应该使用默认内容外观。

popoverLayoutMargins

定义了可在其中显示弹出菜单的屏幕部分的边缘。

也与块一起工作


当动画序列结束时可以执行一个块对象。此参数可以是 nil

重要:如果已定义块对象,则不会调用对应的代理方法。

示例

popover = [[WYPopoverController alloc] initWithContentViewController:contentViewController];
[popover presentPopoverAsDialogAnimated:YES
                             completion:^{
                                 // Code executed after popover presentation animation sequence ends
                             }];

动画选项


有三种动画风格

  • 淡入(默认)
  • 缩放
  • 淡入并缩放

示例

popover = [[WYPopoverController alloc] initWithContentViewController:contentViewController];
[popover presentPopoverFromRect:btn.bounds
                         inView:btn
       permittedArrowDirections:WYPopoverArrowDirectionAny
                       animated:YES
                        options:WYPopoverAnimationOptionFadeWithScale];

ARC


WYPopoverController使用ARC。

安装


需要iOS SDK 7.0(与Xcode 5一起使用)。

手动

将以下文件添加到您的项目中

  • WYPopoverController.hWYPopoverController.m
  • WYStoryboardPopoverSegue.hWYStoryboardPopoverSegue.m

并在项目目标的 构建阶段 中链接 QuartzCore.framework 库。

示例


简单

在您的视图控制器实现中

// YourViewController.m

@interface YourViewController () <WYPopoverControllerDelegate>
{
    WYPopoverController* popoverController;
}

- (IBAction)showPopover:(id)sender;

@end

@implementation YourViewController

- (IBAction)showPopover:(id)sender
{
    popoverController = [[WYPopoverController alloc] initWithContentViewController:controller];
    popoverController.delegate = self;
    [popoverController presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
}

- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)controller
{
    return YES;
}

- (void)popoverControllerDidDismissPopover:(WYPopoverController *)controller
{
    popoverController.delegate = nil;
    popoverController = nil;
}

@end
外观(着色颜色)
[WYPopoverController setDefaultTheme:[WYPopoverTheme theme]];

WYPopoverBackgroundView *appearance = [WYPopoverBackgroundView appearance];
[appearance setTintColor:[UIColor orangeColor]];
外观(平面弹出菜单)
UIColor *greenColor = [UIColor colorWithRed:26.f/255.f green:188.f/255.f blue:156.f/255.f alpha:1];

[WYPopoverController setDefaultTheme:[WYPopoverTheme theme]];

WYPopoverBackgroundView *popoverAppearance = [WYPopoverBackgroundView appearance];

[popoverAppearance setOuterCornerRadius:4];
[popoverAppearance setOuterShadowBlurRadius:0];
[popoverAppearance setOuterShadowColor:[UIColor clearColor]];
[popoverAppearance setOuterShadowOffset:CGSizeMake(0, 0)];

[popoverAppearance setGlossShadowColor:[UIColor clearColor]];
[popoverAppearance setGlossShadowOffset:CGSizeMake(0, 0)];

[popoverAppearance setBorderWidth:8];
[popoverAppearance setArrowHeight:10];
[popoverAppearance setArrowBase:20];

[popoverAppearance setInnerCornerRadius:4];
[popoverAppearance setInnerShadowBlurRadius:0];
[popoverAppearance setInnerShadowColor:[UIColor clearColor]];
[popoverAppearance setInnerShadowOffset:CGSizeMake(0, 0)];

[popoverAppearance setFillTopColor:greenColor];
[popoverAppearance setFillBottomColor:greenColor];
[popoverAppearance setOuterStrokeColor:greenColor];
[popoverAppearance setInnerStrokeColor:greenColor];

UINavigationBar* navBarInPopoverAppearance = [UINavigationBar appearanceWhenContainedIn:[UINavigationController class], [WYPopoverController class], nil];
[navBarInPopoverAppearance setTitleTextAttributes: @{
                  UITextAttributeTextColor : [UIColor whiteColor],
            UITextAttributeTextShadowColor : [UIColor clearColor],
           UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(0, -1)]}];
Storyboard
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"[YOUR_SEGUE_IDENTIFIER]"])
    {
        WYStoryboardPopoverSegue* popoverSegue = (WYStoryboardPopoverSegue*)segue;

        UIViewController* destinationViewController = (UIViewController *)segue.destinationViewController;
        destinationViewController.contentSizeForViewInPopover = CGSizeMake(280, 280);       // Deprecated in iOS7. Use 'preferredContentSize' instead.

        popoverController = [popoverSegue popoverControllerWithSender:sender permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
        popoverController.delegate = self;
    }
}
主题

从0.2.1版本开始引入,您可以使用主题更改弹出菜单的外观。

- (void)changePopoverTheme
{
    popover.theme = [WYPopoverTheme themeForIOS6];  // you set a new theme

    // use beginThemeUpdates and endThemeUpdates methods if you have to change several values which compose your current theme

    [popover beginThemeUpdates];
        popover.theme.arrowHeight = 30;
        popover.theme.arrowBase = 40;
    [popover endThemeUpdates];
}
键盘

默认情况下,当键盘显示时,如果弹出层(部分)隐藏,则会重新定位。从0.2.1版本引入,您可以使用以下delegate方法来控制键盘显示时y偏移量的值。

- (void)popoverController:(WYPopoverController *)popoverController willTranslatePopoverWithYOffset:(CGFloat *)value
{
    *value = 0; // if value is setted to 0 then popover will not be translated
}

处理旋转时弹出层控制器


在显示弹出层控制器时,有时需要处理设备方向改变后弹出层控制器如何出现。

需要处理的情况

  • 如果弹出层控制器是通过使用WYPopoverController的-presentPopoverFromRect:inView:permittedArrowDirections:animated方法从目标矩形显示的。您可以使用在0.1.6版本中引入的-popoverController:willRepositionPopoverToRect:inView:方法。
  • 如果弹出层控制器是从在旋转完成后被移除的导航栏按钮项中显示的。

变更日志


每个WYPopoverController版本简要总结可以在维基上找到。

联系方式


许可证


WYPopoverController可以在MIT许可证下使用。

版权所有 © 2013 Nicolas CHENG

特此无偿授予任何获得此软件及其相关文档文件(“软件”)副本的个人在此软件中不受限制地处理的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本来供软件受让人使用的权利,并允许软件受让人进行上述操作,前提是以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者都不会对任何主张、损害或其他责任承担责任,无论是根据合同、侵权或其他原因产生的,无论是从、因或与软件或其使用或其他方式有关。