2014-08-28 72 views
0

我正在使用一種方法向我的按鈕添加陰影。問題出在那之後,我不能點擊它們。我將userinteractionenabled屬性添加到YES,但仍然無法點按。添加子視圖後無法點擊UIButton

這是代碼。

我該如何解決?我錯過了什麼嗎?

- (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; 
} 
+0

你的影子框架是0,0,0,0,除非你張貼不正確的代碼... – rebello95 2014-08-28 02:42:56

回答

0

這是有道理的,因爲你已經把一個UIView上的按鈕,這意味着你不能訪問該按鈕的上方。您已在UIView上設置UserInteractionEnabled,但這沒用,因爲您並未要求UIView響應觸摸事件。在這種情況下,我會建議在UIView中添加一個UIGestureRecognizer,而不是試圖將一個UIView放在按鈕上。

+0

所以,我需要添加一個手勢到陰影視圖?我的IBAction將無用? – 2014-08-28 02:56:11

+0

正如你現在建立它,IBAction是無用的。想想看...在視圖層次結構中,你已經將一個UIView放置在UIButton的頂部,因此用戶無法訪問位於視圖下方的按鈕。您可以嘗試的一種解決方法是在陰影視圖上使用sendSubViewToBack,並使UIButton背景色透明,並且應該具有所需的效果。 UIButton將位於頂部,並且通過它可以看到陰影視圖 – cph2117 2014-08-28 03:01:33

+0

我正在嘗試添加該行[shadow bringSubviewToFront:view];但它不起作用。另外,我添加了[shadow sendSubviewToBack:view],但不起作用。 移動子視圖的最佳方法是什麼? – 2014-08-28 03:23:41

0
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。那麼你怎麼能點擊它?

+0

好的,我明白了你的觀點。我將其更改爲此 CGRect shadowFrame; //如果需要,修改它 shadowFrame.size.width = view.frame.size.width; shadowFrame.size.height = view.frame.size.height; shadowFrame.origin.x = 0.f; shadowFrame.origin.y = 0.f; 並將陰影視圖背景更改爲綠色以查看其位置。現在它位於左上角。但是如果我改變原點,其他元素就會改變它們的位置。我該如何解決這個問題? – 2014-08-28 03:50:26

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]; 
} 

有了這個,你可以同時具有圓角和陰影的視圖。而且,當然,觸摸事件啓用!

相關問題