16

我已经使用这个很好的教程来创建自定义 UIPopoverBackgroundView 类。

它运作良好。唯一的问题是我没有得到典型的 UIPopoverController 投影,我想要它。我尝试在我的 UIPopoverBackgroundView 实例层上指定它但没有成功。我的 UIPopoverController 实例似乎没有可操作的公共视图。将其添加到弹出内容中也不起作用。

可能真的很简单:使用自定义 UIPopoverBackgroundView 类时如何添加阴影?

// UIPooverBackgroundView.m

-(id)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        _borderImageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"bg-popover.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(CAP_INSET,CAP_INSET,CAP_INSET,CAP_INSET)]];

        _arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg-popover-arrow.png"]];

        [self addSubview:_borderImageView];
        [self addSubview:_arrowView];

        self.layer.shadowOffset = CGSizeMake(50, 50);
        self.layer.shadowColor = [[UIColor blackColor] CGColor];
    }

    return self;
}
4

2 回答 2

19

您不需要添加自己的阴影。基地UIPopoverBackgroundView会为你做这件事。只要确保在您的layoutSubviews实现中调用 super 即可。

编辑:我的评论适用于针对 iOS 6 的应用程序。

于 2012-10-02T04:41:26.540 回答
14

好的,想通了。我需要将投影添加到borderImageView,而不是 popover 实例的视图。

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        _borderImageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"bg-popover.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(CAP_INSET,CAP_INSET,CAP_INSET,CAP_INSET)]];

        _arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg-popover-arrow.png"]];

        [self addSubview:_borderImageView];
        [self addSubview:_arrowView];

        _borderImageView.layer.cornerRadius = 5.0f;
        _borderImageView.layer.masksToBounds = NO;
        _borderImageView.layer.borderWidth = 1.0f;
        _borderImageView.layer.borderColor = [UIColor blackColor].CGColor;

        _borderImageView.layer.shadowColor = [UIColor blackColor].CGColor;
        _borderImageView.layer.shadowOpacity = 0.8;
        _borderImageView.layer.shadowRadius = 50;
        _borderImageView.layer.shadowOffset = CGSizeMake(-10.0f, 10.0f);
    }

    return self;
}
于 2012-04-06T13:55:48.137 回答