iOS UIPopoverView的使用
2015-08-13 23:31
549 查看
UIViewController *contentViewController = [[UIViewController alloc] init]; contentViewController.view.backgroundColor = [UIColor yellowColor]; UIPopoverController *popController = [[UIPopoverController alloc] initWithContentViewController:contentViewController]; // popController.popoverBackgroundViewClass = [PopoverBackgroundView class]; popController.popoverContentSize = CGSizeMake(300.0f, 100); self.popController = popController; UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(20, 20, 100, 30); button.backgroundColor = [UIColor redColor]; [button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside]; [contentViewController.view addSubview:button]; [self.popController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
也可以自定义背景
#import <UIKit/UIKit.h> @interface PopoverBackgroundView : UIPopoverBackgroundView @end
#import "PopoverBackgroundView.h" #define kArrowBase 30.0f #define kArrowHeight 20.0f #define kBorderInset 0.0f @interface PopoverBackgroundView() @property (nonatomic, strong) UIImageView *arrowImageView; - (UIImage *)drawArrowImage:(CGSize)size; @end @implementation PopoverBackgroundView @synthesize arrowDirection = _arrowDirection; @synthesize arrowOffset = _arrowOffset; #pragma mark - Graphics Methods - (UIImage *)drawArrowImage:(CGSize)size { UIGraphicsBeginImageContextWithOptions(size, NO, 0); CGContextRef ctx = UIGraphicsGetCurrentContext(); [[UIColor clearColor] setFill]; CGContextFillRect(ctx, CGRectMake(0.0f, 0.0f, size.width, size.height)); CGMutablePathRef arrowPath = CGPathCreateMutable(); CGPathMoveToPoint(arrowPath, NULL, (size.width/2.0f), 0.0f); //Top Center CGPathAddLineToPoint(arrowPath, NULL, size.width, size.height); //Bottom Right CGPathAddLineToPoint(arrowPath, NULL, 0.0f, size.height); //Bottom Right CGPathCloseSubpath(arrowPath); CGContextAddPath(ctx, arrowPath); CGPathRelease(arrowPath); UIColor *fillColor = [UIColor yellowColor]; CGContextSetFillColorWithColor(ctx, fillColor.CGColor); CGContextDrawPath(ctx, kCGPathFill); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } #pragma mark - UIPopoverBackgroundView Overrides - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor clearColor]; //TODO: update with border image view UIImageView *arrowImageView = [[UIImageView alloc] initWithFrame:CGRectZero]; self.arrowImageView = arrowImageView; [self addSubview:self.arrowImageView]; } return self; } + (CGFloat)arrowBase { return kArrowBase; } + (CGFloat)arrowHeight { return kArrowHeight; } + (UIEdgeInsets)contentViewInsets { return UIEdgeInsetsMake(kBorderInset, kBorderInset, kBorderInset, kBorderInset); } + (BOOL)wantsDefaultContentAppearance { return NO; } - (void)layoutSubviews { [super layoutSubviews]; //TODO: test for arrow UIPopoverArrowDirection CGSize arrowSize = CGSizeMake([[self class] arrowBase], [[self class] arrowHeight]); self.arrowImageView.image = [self drawArrowImage:arrowSize]; self.arrowImageView.frame = CGRectMake(((self.bounds.size.width - arrowSize.width)- kBorderInset), 0.0f, arrowSize.width, arrowSize.height); }
相关文章推荐
- UGUI下拉列表修改(0813Edit)
- 源码分析looper,messagequeue及handler的创建调用过程
- UITableView 属性 方法 协议 大全
- UVA 10911 Forming Quiz Teams
- IBM Bluemix云计算大会见闻
- gradle 配置文件 build.gradle 属性详解
- UI 07 _ 导航视图控制器 与 属性传值
- Innodb/MyISAM在自增/UUID主键下的性能与索引空间比较
- Havok_2014-1-0_Pc_Xs_User_Guide(2.2.2-模拟仿真一个Physics2012世界)
- Havok_2014-1-0_Pc_Xs_User_Guide(1.5.7-计时器)
- UIViewController _loadViewFromNibNamed:bundle:
- -[UIViewController _loadViewFromNibNamed:bundle
- spoj1182 Sorted bit squence
- UIPageControl 与 UIScrollView
- Android中Looper的quit方法和quitSafely方法
- UVa 11955 I Can Guess the Data Structure!
- The Unique MST prim(次小生成树)
- 【转载】UITableView
- iOS开发 -- UILable详解
- iOS开发 -- UIView详解