Невозможно нажать на UIButton после добавления subview

Я использую метод добавления тени к моим кнопкам. Проблема в том, что я не могу щелкнуть в них. Я добавляю свойство userinteractionenabled к YES, но все равно не могу нажать.

Это код.

Как я могу это решить? Я что-то пропустил?

- (UIView*)putView:(UIView*)view insideShadowWithColor:(UIColor*)color andRadius:(CGFloat)shadowRadius andOffset:(CGSize)shadowOffset andOpacity:(CGFloat)shadowOpacity
{
    CGRect shadowFrame; // Modify this if needed
    shadowFrame.size.width = 0.f;
    shadowFrame.size.height = 0.f;
    shadowFrame.origin.x = 0.f;
    shadowFrame.origin.y = 0.f;
    UIView * shadow = [[UIView alloc] initWithFrame:shadowFrame];
    shadow.userInteractionEnabled = YES; // Modify this if needed
    shadow.layer.shadowColor = color.CGColor;
    shadow.layer.shadowOffset = shadowOffset;
    shadow.layer.shadowRadius = shadowRadius;
    shadow.layer.masksToBounds = NO;
    shadow.clipsToBounds = NO;
    shadow.layer.shadowOpacity = shadowOpacity;
    [view.superview insertSubview:shadow belowSubview:view];
    [shadow addSubview:view];
    return shadow;
}

Ответы

Ответ 1

Я нахожу решение

После комментариев людей я внес некоторые изменения. Это окончательный код

+ (void)putView:(UIView*)view insideShadowWithColor:(UIColor*)color andBlur:(CGFloat)shadowRadius andOffset:(CGSize)shadowOffset andOpacity:(CGFloat)shadowOpacity
{
    CGRect shadowFrame = view.frame;
    UIView * shadow = [[UIView alloc] initWithFrame:shadowFrame];
    shadow.backgroundColor = [UIColor redColor];
    shadow.userInteractionEnabled = YES; // Modify this if needed
    shadow.layer.shadowColor = color.CGColor;
    shadow.layer.shadowOffset = shadowOffset;
    shadow.layer.shadowRadius = shadowRadius;
    shadow.layer.cornerRadius = view.layer.cornerRadius;
    shadow.layer.masksToBounds = NO;
    shadow.clipsToBounds = NO;
    shadow.layer.shadowOpacity = shadowOpacity;
    [view.superview insertSubview:shadow belowSubview:view];
}

При этом вы можете одновременно просматривать круглые углы и тени. И, конечно же, активированы сенсорные события!

Ответ 2

Это имеет смысл, потому что вы положили UIView поверх кнопки, что означает, что вы не можете получить доступ к этой кнопке. Вы установили UserInteractionEnabled в UIView, но это бесполезно, потому что вы не просили UIView отвечать на события касания. В этом случае я бы предложил добавить UIGestureRecognizer в UIView вместо того, чтобы ставить UIView поверх кнопки.

Ответ 3

CGRect shadowFrame; // Modify this if needed
shadowFrame.size.width = 0.f;
shadowFrame.size.height = 0.f;
shadowFrame.origin.x = 0.f;
shadowFrame.origin.y = 0.f;
UIView * shadow = [[UIView alloc] initWithFrame:shadowFrame];

В приведенном выше коде у вас есть представление с кадром 0,0,0,0. Итак, как вы можете нажать на нее?