簡體   English   中英

無法按UIView下面帶有角半徑的UIButton

[英]Not able to press an UIButton below UIView with corner radius

我已經在視圖的左下角的視圖下方添加了一個UIView和一個UIButton

我通過以下方式將角半徑添加到了UIView對象中:

self.myView.layer.cornerRadius = self.myView.frame.size.width/2;
self.myView.layer.masksToBounds = YES;

現在它具有圓形形狀,並且我的按鈕可見。 見下圖: 在此處輸入圖片說明

問題是我無法按下按鈕(未突出顯示)。 我該如何使它動人?

我知道將按鈕放在前面可以解決問題,但是我想知道是否可以通過保持在視圖下方來按下按鈕。

通過以下鏈接解決了此問題: 允許與另一個UIView下的UIView交互

遞歸hittest是我建議使用的一種。 但是,可接受的答案也很有趣(使視圖對於觸摸或其他東西變得透明)。

您需要子類化UIView以用作您的圈子並覆蓋以下方法:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    CGFloat radius = self.frame.size.width/2;
    CGFloat distance = sqrtf(powf(point.x-self.frame.size.width/2, 2)+powf(point.y-self.frame.size.height/2, 2));
    if(distance<radius)
        return [super hitTest:point withEvent:event];
    return nil;
}

這使得視圖僅接受圓內的觸摸。 您可能需要調整邏輯以適合您的視圖。

您的按鈕可能被遮蓋了。 您可以在其后添加按鈕,也可以使用此方法將其置於最前面,即[parentView BringSubviewToFront:childView];

將您的圓形視圖的userInteractionEnabled屬性設置為NO會將觸摸傳遞到按鈕。

self.myView.userInteractionEnabled = NO;

@robert的答案,稍有修正,很快:

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView?
{
    let radius   = self.frame.size.width / 2
    let distance = sqrt(pow(point.x - self.frame.size.width  / 2, 2) +
                        pow(point.y - self.frame.size.height / 2, 2))

    return distance < radius ? super.hitTest(point, withEvent: event) : nil
}

有不同的方法。 取決於您所說的“可觸摸”

您只需在按鈕上添加目標操作即可在按下按鈕時進行操作。 你會這樣說

[button addTarget:self action:@selector(methodForTouchingButton) forControlEvents:UIControlEventTouchUpInside];

那么你必須聲明這個方法

- (void) methodForTouchingButton
{ NSLog(@"Button Touched!"); }

您可以做的另一種方法是嘗試將其添加到頂層視圖。 這樣做是

[self.myView addSubview:button];

那應該做到的。

希望這可以幫助!!

將按鈕放在視圖上方,而不是下方。 即使您具有拐角半徑,該視圖也將覆蓋該按鈕。 視圖使用其框架矩形來確定哪個視圖可被點擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM