用白色箭头和白色背景矩形制作Popover

时间:2014-06-20 18:32:29

标签: ios objective-c uipopovercontroller

我想制作一个带有白色箭头和白色背景矩形(没有圆角)的自定义UIPopover。但是,当显示弹出窗口时,箭头丢失。我该怎么做才能解决这个错误。非常感谢!

CustomizedPopoverController.h:

#import <UIKit/UIKit.h>
@interface CustomizedPopoverController: UIPopoverBackgroundView

@property (nonatomic, readwrite) CGFloat arrowOffset;
@property (nonatomic, readwrite) UIPopoverArrowDirection arrowDirection;

+ (CGFloat)arrowHeight;
+ (CGFloat)arrowBase;
+ (UIEdgeInsets)contentViewInsets;

@end

CustomizedPopoverController.m:

#import "CustomizedPopoverController.h"

@implementation CustomizedPopoverController

@synthesize arrowDirection = _arrowDirection;
@synthesize arrowOffset = _arrowOffset;

#define ArrowBase 30.0f
#define ArrowHeight 15.0f
#define BorderInset 10.0f


- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self setBackgroundColor:[UIColor whiteColor]];
    }
    return self;
}

- (CGFloat) arrowOffset {
    return _arrowOffset;
}

- (void) setArrowOffset:(CGFloat)arrowOffset {
    _arrowOffset = arrowOffset;
}

- (UIPopoverArrowDirection)arrowDirection {
    return _arrowDirection;
}

- (void)setArrowDirection:(UIPopoverArrowDirection)arrowDirection {
    _arrowDirection = arrowDirection;
}


+(UIEdgeInsets)contentViewInsets{
    return UIEdgeInsetsMake(BorderInset, BorderInset, BorderInset, BorderInset);
}

+(CGFloat)arrowHeight{
    return ArrowHeight;
}

+(CGFloat)arrowBase{
    return ArrowBase;
}


-  (void)layoutSubviews {
    [super layoutSubviews];

    CGFloat _height = self.frame.size.height;
    CGFloat _width = self.frame.size.width;
    CGFloat _left = 0.0;
    CGFloat _top = 0.0;
    CGFloat _coordinate = 0.0;
    CGAffineTransform _rotation = CGAffineTransformIdentity;


    switch (self.arrowDirection) {
        case UIPopoverArrowDirectionUp:
            _top += ArrowHeight;
            _height -= ArrowHeight;
            _coordinate = ((self.frame.size.width / 2) + self.arrowOffset) - (ArrowBase/2);
            break;


        case UIPopoverArrowDirectionDown:
            _height -= ArrowHeight;
            _coordinate = ((self.frame.size.width / 2) + self.arrowOffset) - (ArrowBase/2);
            _rotation = CGAffineTransformMakeRotation( M_PI );
            break;

        case UIPopoverArrowDirectionLeft:
            _left += ArrowBase;
            _width -= ArrowBase;
            _coordinate = ((self.frame.size.height / 2) + self.arrowOffset) - (ArrowHeight/2);
            _rotation = CGAffineTransformMakeRotation( -M_PI_2 );
            break;

        case UIPopoverArrowDirectionRight:
            _width -= ArrowBase;
            _coordinate = ((self.frame.size.height / 2) + self.arrowOffset)- (ArrowHeight/2);
            _rotation = CGAffineTransformMakeRotation( M_PI_2 );

            break;
    }
}
/*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.
 - (void)drawRect:(CGRect)rect
 {
 // Drawing code
 }
 */

@end

0 个答案:

没有答案