Подтвердить что ты не робот

Пользовательский UIPopoverBackgroundView: нет тени

Я использовал этот хороший учебник для создания пользовательского класса UIPopoverBackgroundView.

Это хорошо работает. Единственная проблема заключается в том, что я не получаю типичную тень тени UIPopoverController, и я хочу ее. Я попытался указать его на уровне моего экземпляра UIPopoverBackgroundView без успеха. Мой экземпляр UIPopoverController, похоже, не имеет публичного представления для манипулирования. Добавление его к содержимому popover также не работает.

Вероятно, очень просто: как добавить тень при использовании пользовательского класса UIPopoverBackgroundView?

//UIPopoverBackgroundView.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;
}
4b9b3361

Ответ 1

Хорошо, понял. Мне нужно было добавить тень сбрасывания к 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;
}

Ответ 2

Вам не нужно добавлять собственные тени. База UIPopoverBackgroundView сделает это за вас. Просто убедитесь, что вы вызываете super в своей реализации layoutSubviews.

EDIT: Мой комментарий относится к приложениям, ориентированным на iOS 6.