Вы должны переопределить метод drawRect
вида сверху. Так, например, вы можете создать класс HoleyView
, который наследуется от UIView
(вы можете сделать это, добавив новый файл в ваш проект, выбрав подкласс Objective-C и установив "Подкласс" в UIView
) , В HoleyView
, drawRect
будет выглядеть примерно так:
- (void)drawRect:(CGRect)rect {
// Start by filling the area with the blue color
[[UIColor blueColor] setFill];
UIRectFill( rect );
// Assume that there's an ivar somewhere called holeRect of type CGRect
// We could just fill holeRect, but it's more efficient to only fill the
// area we're being asked to draw.
CGRect holeRectIntersection = CGRectIntersection( holeRect, rect );
[[UIColor clearColor] setFill];
UIRectFill( holeRectIntersection );
}
Если вы используете Интерфейсный конструктор, обязательно измените класс представления дырки на HoleyView
. Вы можете сделать это, выбрав в представлении в Интерфейсном Разработчике и выбрав панель «Удостоверение» в Инспекторе (в правом нижнем углу - значок «i»).
Вы также должны установить непрозрачный вид сверху либо с помощью следующего фрагмента кода, либо сняв флажок Opaque
в свойствах представления в Интерфейсном Разработчике (вы найдете его в разделе «Вид» атрибутов представления) и установите непрозрачность его цвета фона на 0% (цвет фона устанавливается в том же разделе).
topView.opaque = NO;
topView.backgroundColor = [UIColor clearColor];
Если вы хотите сделать круги, вы должны использовать Core Graphics
(он же Quartz 2D). Возможно, вы захотите прочитать руководство по программированию, которое доступно здесь .
Чтобы нарисовать эллипс вместо прямоугольника, ваш drawRect
будет выглядеть примерно так:
- (void)drawRect:(CGRect)rect {
// Get the current graphics context
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor( context, [UIColor blueColor].CGColor );
CGContextFillRect( context, rect );
if( CGRectIntersectsRect( holeRect, rect ) )
{
CGContextSetFillColorWithColor( context, [UIColor clearColor].CGColor );
CGContextFillEllipseInRect( context, holeRect );
}
}