Сделать пересечение прозрачным, используя несколько подпредставлений - PullRequest
2 голосов
/ 27 декабря 2011

Пожалуйста, проверьте изображение ниже.Я добавил прокрутки в цвете «Чёрный» и добавил подпредставления в цвете «Серый».Теперь я хочу сделать прозрачным подпредставление, которое определяется как «БЕЛЫЙ» цвет.

Пожалуйста, обратитесь к приведенному ниже коду.Дайте мне знать, как сделать кнопку прозрачной с определенной рамкой, или дайте мне знать, если у вас есть какая-либо альтернатива для этого.

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

Вместо этого перерыва кнопка нужна прозрачная часть серого цвета, чтобы пользователь мог видеть черныйэта часть.

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 декабря 2011

Хорошо.Забавный вопрос.По моему мнению, вы должны переопределить drawRect: + drawInContext: методы путем создания подкласса класса UIView.Вам также нужно установить контейнер (серый вид) + кнопку bg, чтобы очиститьЦвет

-(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);
    }
}

here is a screen shot

0 голосов
/ 27 декабря 2011

Попробуйте, я предложил это в комментариях.Другой ответ требует создания подкласса 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, который вы можете искать.Обратите внимание, что центр чистый, а не белый.Следовательно, оно должно показывать любое изображение, которое стоит за ним:

button with hole

...