zoukankan      html  css  js  c++  java
  • iOS UIPopoverView的使用

     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);
        
    }
  • 相关阅读:
    Oracle 推出 ODAC for Entity Framework 和 LINQ to Entities Beta版
    Entity Framework Feature CTP 5系列文章
    MonoDroid相关资源
    MSDN杂志上的Windows Phone相关文章
    微软学Android Market推出 Web Windows Phone Marketplace
    使用 Visual Studio Agent 2010 进行负载压力测试的安装指南
    MonoMac 1.0正式发布
    Shawn Wildermuth的《Architecting WP7 》系列文章
    使用.NET Mobile API即51Degrees.mobi检测UserAgent
    MongoDB 客户端 MongoVue
  • 原文地址:https://www.cnblogs.com/keyan1102/p/4728771.html
Copyright © 2011-2022 走看看