Изменение цвета небольшой части UIView?

У меня есть UIView с черным цветом и непрозрачностью 0,9 или что-то в этом роде. Что я хочу сделать, так это заполнить UIView черной частью, но указанная прямоугольная область не должна стать черной. то есть эта конкретная прямоугольная область остается с четким цветом...

Любая помощь будет оценена по достоинству.

С уважением,

Имран


person Imran    schedule 12.05.2011    source источник


Ответы (3)


Вы можете создать подкласс UIView и переопределить - (void)drawRect:(CGRect)rect

И сделайте что-нибудь из следующего (не проверено, но я использовал что-то подобное);

- (void)drawRect:(CGRect)rect {

// fill the whole UIView with a color
[[UIColor colorWithRed:1 green:1 blue:1 0.9] setFill];
UIRectFill( rect );

// draw a rect
CGRect rectIntersection = CGRectIntersection(theRectIWantToDrawIn, rect);

[[UIColor clearColor] setFill];
UIRectFill( rectIntersection );
}

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

Это довольно быстро.

ОБНОВЛЕНИЕ: Обратите внимание, что я установил UIView, на котором я хочу нарисовать прямоугольник, в цвет UIClear (я добавил его в xib и установил там эти свойства) и снял флажок «Непрозрачный». Это должно сделать отверстие прозрачным.

ОБНОВЛЕНИЕ 2: Мой ответ был основан на этом ответе (кредит, причитающийся): iPhone — нарисуйте прозрачный прямоугольник в UIView, чтобы показать вид под ним

person Jake    schedule 12.05.2011
comment
Отлично ! Это то, что я хотел :) Никогда не знал о прямоугольнике пересечения ... но у меня с ним проблема ... приведенный выше код действительно дает мне дыру в главном представлении ... но часть, где я должен иметь чистый цвет (т.е. внутренний прямоугольник); если я использую «clearColor», он возвращает черный цвет внутри. Не совсем то, что я ожидал, потому что у меня должен быть четкий цвет, чтобы пользователь мог заглянуть в фоновый вид ... есть мысли? - person Imran; 12.05.2011
comment
Я думаю, что забыл упомянуть, что вы должны установить некоторые свойства для представления. Обновил мой предыдущий ответ. - person Jake; 12.05.2011

Добавьте еще одно представление (подвид) в эту область. И установите желаемый цвет. Это простое решение с вашими текущими требованиями. Или вы можете использовать некоторые функции кварцевого ядра.

person karim    schedule 12.05.2011

Вы можете создать небольшой UIView в главном окне по индивидуальному заказу и установить чистый цвет фона.

UIView *View1 = [[UIView alloc] initWithFrame:CGRectMake(128.0f, 50.0f, 34.0f, 34.0f)];
[View1 setBackgroundColor:[UIColor clearColor]];        
[self.view addSubview:View1];
[View1 release];
person Deepesh    schedule 12.05.2011