iOS: рисование линии появляется за подпредставлением - PullRequest
4 голосов
/ 24 августа 2011

У меня есть простой UIView в drawRect: я добавляю UIImageView в качестве подпредставления, а затем пытаюсь нарисовать линию поверх этого подпредставления.Но за линией изображения рисуется линия.

Как сделать контекст рисования вложенным, чтобы рисовать поверх него?

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 10.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextBeginPath(context);
CGContextMoveToPoint(context, 0, 0);
CGContextAddCurveToPoint(context,125,150,175,150,200,100);
CGContextAddCurveToPoint(context,225,50,275,75,300,200);
CGContextStrokePath(context);

Ответы [ 2 ]

7 голосов
/ 24 августа 2011

Создайте другой пользовательский вид, который выполняет только рисование линии.Добавьте его в качестве подпредставления с тем же фреймом, что и ImageView, и вызовите метод acceptSubviewToFront, чтобы убедиться, что он впереди.Возможно, вам придется установить некоторые атрибуты в вашем пользовательском представлении, например opaque = NO, и установить для цвета фона значение очистить ([UIColor colorWithWhite:0.0 alpha:0.0]).

Кстати, не добавляйте никаких подпредставлений в drawRect.drawRect должен просто рисовать, а не изменять атрибуты вида или иерархию.Вы должны добавить ImageView и пользовательский вид рисования линий где-нибудь еще, возможно, в init.Вот так:

@implementation MyView

-(id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        imageView = ... // however you create your image view
        [self addSubview:imageView];
        lineView = [[MyLineView alloc] initWithFrame:imageView.frame];
        [self addSubview:lineView];
        [self bringSubviewToFront:lineView];
    }
    return self;
}

...

@end

@implementation MyLineView

-(void)drawRect:(CGRect)rect {
    // your drawing code
    // remember the coordinate system now has (0, 0) at the top left corner of the
    // image view, so adjust your drawing code accordingly
}

@end
3 голосов
/ 24 августа 2011

Представления рисуются в обратном порядке. Если вы хотите, чтобы что-то появилось в подпредставлении, подпредставление должно нарисовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...