簡體   English   中英

使用多個子視圖使交集透明

[英]Make intersection transparent using multiple subviews

請檢查下圖。 我已經以“黑色”顏色添加了滾動視圖,並以“灰色”顏色添加了子視圖。 現在我想使子視圖透明,這被定義為“白色”顏色。

請參考下面的代碼。 讓我知道如何使按鈕在特定框架下透明,或者讓我知道是否有其他選擇。

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 40.0, self.frame.size.width, 300.0)];
self.scrollView.contentSize = CGSizeMake(self.bounds.size.width,ViewHeight);
self.scrollView.autoresizingMask=UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.scrollView.delegate = self;
self.scrollView.backgroundColor =[UIColor blackColor];
[self.view addSubview:self.scrollView


UIButton *butApp = [UIButton buttonWithType:UIButtonTypeCustom];
[butApp setFrame:CGRectMake(x, y , w, h)];
[butApp setBackgroundColor:[UIColor greyColor]];
[self.scrollView addSubview:butApp];


UIButton* gapButton = [UIButton buttonWithType:UIButtonTypeCustom];
[gapButton setFrame:CGRectMake(x+3, y+10, w-6, 10)];
[gapButton setBackgroundColor:[UIColor whiteColor]];
[self.scrollView addSubview:gapButton];

代替這個gapButton,我需要灰色的透明部分,以便用戶可以在該部分看到黑色。

在此處輸入圖片說明

試試這個,我建議在評論中。 其他答案需要將UIButton子類化,您認為這在您的情況下並不理想。

UIButton *butApp = [UIButton buttonWithType:UIButtonTypeCustom];
[butApp setFrame:CGRectMake(x, y , w, h)];
//[butApp setBackgroundColor:[UIColor greyColor]]; //replace this...
[butApp setBackgroundImage:[UIImage imageNamed:@"greyWithHoleInCenter.png"]
                   forState:UIControlStateNormal]; //...with this
[self.scrollView addSubview:butApp];

我創建了一個原始的.png文件來表示您可能正在尋找的backgroundImage。 請注意,中心清晰,而不是白色。 因此,它應該顯示其背后的任何圖像:

帶孔按鈕

好。 有趣的問題。 我認為您必須通過子類化UIView類來重寫drawRect:+ drawInContext:方法。 您還需要將容器視圖(灰色視圖)+按鈕bg設置為clearColor

-(void)drawRect:(CGRect)r
{
 // Let this method blank will cause drawLayer:InContext to be called
}

-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
{
       // Fill the bg with gray 
    CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
    CGContextFillRect(context, self.bounds);

      // I clear the subview frames
    for (UIView * v in [self subviews]) // I do it for all subviews
    {
        CGContextSetBlendMode(context, kCGBlendModeClear);
        CGContextFillRect(context, v.frame);
    }
}

這是一個屏幕截圖

暫無
暫無

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

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