2014-02-05 59 views
0

正在積極我有簡單的UIView層次:的iOS:UIView的層次結構:使地圖視圖的UIView

container View: 
→ Map View 
→ Custom View 

我的自定義視圖部分重疊的地圖視圖。我可以看到地圖,但我無法與地圖互動縮放,滾動等。

如何在同一時間部分地圖重疊和交互存檔? 隨意問我,如果你不明白的東西。

編輯

我想禁用黑色區域互動,但允許在我UIView用黑色覆蓋區域的中心圓,即互動。

enter image description here

+0

什麼是MapView類和customview相對於continer視圖幀? – Apurv

+0

將遮罩應用於您的自定義視圖 –

+0

@Apurv與容器視圖邊界相同 –

回答

1

我假設你有這樣的事情:

example

您希望能觸摸到紅色區域,並觸摸地圖,當黃色區域,但它正在被黃色子視圖封鎖?

如果是這樣,子類黃子視圖並覆蓋-pointInside:方法,它允許你指定一個觸摸點是否會與觀點碰撞,或退回到它後面的視圖。

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    return [[UIBezierPath bezierPathWithOvalInRect:self.bounds] containsPoint:point]; 
} 
+0

我只想與紅色區域進行交互。我會盡力實現這一點。 –

+0

哇,像一個魅力的這項工作,但我不明白爲什麼我們做出這樣的矩形,爲什麼這個號碼?爲什麼他們的工作:) –

+0

@flinth我的號碼只是一個例子,它只允許在一個100x30平方的交互。您應該更改代碼以最適合您的觸摸區域。 – SomeGuy

0

如果視圖僅部分地覆蓋它下面的觀點,敷個面膜告訴IOS該

例如從XBPageCurl

- (void)applyCornerMaskAsNeeded { 
    // 
    //create mask 
    // 

    UIImage *cornerImage = [UIImage imageNamed:@"corner_view_mask.png"]; //this is black//white/alpha 
    CGRect b = self.layer.bounds; 
    CGRect rtCornerRect=CGRectZero; 
    UIGraphicsBeginImageContextWithOptions(b.size, NO, 0); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    //white bg 
    CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); 
    CGContextFillRect(context, b); 

    //draw corner image mask 
    CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, cornerImage.size.height); 
    CGContextConcatCTM(context, flipVertical); 
    CGContextSetBlendMode(context, kCGBlendModeCopy); 
    rtCornerRect = [self cornerRectFor:XBPageDragViewCornerTopRight withSize:cornerImage.size.width]; 
    CGContextDrawImage(context, rtCornerRect, cornerImage.CGImage); 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    // 
    //apply mask 
    // 
    CALayer *l = [CALayer layer]; 
    l.frame = b; 
    l.contents = (id)image.CGImage; 
    l.name = @"XBPageDragViewCornersMask"; 
    [self.layer setMask:l]; 
    self.layer.masksToBounds = YES; 

} 

我github上叉另一個例子是在蘋果文檔,但這個應該已經是相當清楚的:

  1. 你畫的面具。黑色,阿爾法
  2. 你蘋果面膜視圖的層
+0

屏蔽簡單地防止在某些地區的用戶交互似乎有點矯枉過正我 – SomeGuy

+0

@ Daij-Djan謝謝您的回答 –

+0

@SomeGuy好,如果它是一個簡單的「rectange」(或其他簡單的形式),那麼pointInside也許是更好的,但是如果你有更多...複雜partitial覆蓋Id言口罩更好 –