Невозможно нажать на 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. Итак, как вы можете нажать на нее?