测试经过测试 | ✗ |
lang语言 | Obj-CObjective C |
许可证 | MIT |
发布最新发布 | 2016年2月 |
由Sam McEwan,Vitaly Samoylik维护。
WYPopoverController 用于在 iPhone / iPad 设备上展示弹窗内容。非常可定制。
属性 | 类型 | 默认值(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
用于控制覆盖层后面的视图是否暗化其着色颜色。
一个视图数组,在弹出菜单可见时,用户可以与之交互。
确定弹出菜单是否应该使用默认内容外观。
定义了可在其中显示弹出菜单的屏幕部分的边缘。
当动画序列结束时可以执行一个块对象。此参数可以是 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];
WYPopoverController使用ARC。
需要iOS SDK 7.0(与Xcode 5一起使用)。
将以下文件添加到您的项目中
WYPopoverController.h
和 WYPopoverController.m
WYStoryboardPopoverSegue.h
和 WYStoryboardPopoverSegue.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)]}];
- (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
}
在显示弹出层控制器时,有时需要处理设备方向改变后弹出层控制器如何出现。
需要处理的情况
-presentPopoverFromRect:inView:permittedArrowDirections:animated
方法从目标矩形显示的。您可以使用在0.1.6版本中引入的-popoverController:willRepositionPopoverToRect:inView:
方法。每个WYPopoverController版本简要总结可以在维基上找到。
WYPopoverController可以在MIT许可证下使用。
版权所有 © 2013 Nicolas CHENG
特此无偿授予任何获得此软件及其相关文档文件(“软件”)副本的个人在此软件中不受限制地处理的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本来供软件受让人使用的权利,并允许软件受让人进行上述操作,前提是以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者都不会对任何主张、损害或其他责任承担责任,无论是根据合同、侵权或其他原因产生的,无论是从、因或与软件或其使用或其他方式有关。