[英]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.